Beispiel #1
0
    def get_context_data(self, **kwargs):
        context = super(ScriptEditView, self).get_context_data(**kwargs)
        if self.object.pk:
            buttons = []

            edit_button_title = _("Edit Script Contents")

            # this script was created through a template
            # so show an option to easily edit the template
            if self.object.template:
                template_cls = get_identifier_to_object_map(
                    SCRIPT_TEMPLATES_PROVIDE_CATEGORY).get(
                        self.object.template)

                # check whether is possible to edit the script through the template editor
                if template_cls and template_cls(
                        self.object).can_edit_script():
                    # change the editor button title to advanced mode
                    edit_button_title = _("Edit Script (advanced)")

                    buttons.append(
                        URLActionButton(
                            text=_("Edit Template"),
                            icon="fa fa-pencil-square-o",
                            extra_css_class="btn-primary",
                            url=reverse(
                                "shuup_admin:notify.script-template-edit",
                                kwargs={"pk": self.object.pk}),
                        ))

            buttons.insert(
                0,
                URLActionButton(
                    text=edit_button_title,
                    icon="fa fa-pencil",
                    extra_css_class="btn-primary",
                    url=reverse("shuup_admin:notify.script.edit-content",
                                kwargs={"pk": self.object.pk}),
                ),
            )

            buttons.insert(
                1,
                PostActionButton(
                    post_url=reverse("shuup_admin:notify.script.delete",
                                     kwargs={"pk": self.object.pk}),
                    text=_("Delete"),
                    icon="fa fa-trash",
                    extra_css_class="btn-danger",
                    confirm=_(
                        'Are you sure you wish to delete "%s" notification?') %
                    self.object,
                    required_permissions=("notify.script.delete", ),
                ),
            )

            context["toolbar"] = Toolbar(buttons, view=self)
        return context
Beispiel #2
0
 def get_toolbar(self):
     return Toolbar([
         URLActionButton(text="New Script",
                         icon="fa fa-plus",
                         extra_css_class="btn-success",
                         url=reverse("shuup_admin:notify.script.new"))
     ])
Beispiel #3
0
    def get_context_data(self, **kwargs):
        context = super(AddonListView, self).get_context_data(**kwargs)
        context["toolbar"] = Toolbar([
            PostActionButton(
                icon="fa fa-save",
                form_id="addon_list",
                text=_("Save addon changes"),
                extra_css_class="btn-success",
            ),
            NewActionButton(
                reverse("shuup_admin:addon.upload"),
                text=_("Upload new addon"),
                extra_css_class="btn-info",
                icon="fa fa-upload",
            )
        ])
        if self.request.GET.get("reload"):
            context["toolbar"].append(
                URLActionButton(
                    reverse("shuup_admin:addon.reload"),
                    text=_("Reload application"),
                    extra_css_class="btn-warning",
                    icon="fa fa-refresh",
                ))

        return context
Beispiel #4
0
    def get_context_data(self, **kwargs):
        context = super(OrderCreateRefundView, self).get_context_data(**kwargs)
        context["title"] = _("Create Refund -- %s") % context["order"]
        context["toolbar"] = Toolbar([
            PostActionButton(
                icon="fa fa-check-circle",
                form_id="create_refund",
                text=_("Create Refund"),
                extra_css_class="btn-success",
            )
        ], view=self)

        # Allowing full refunds for suppliers would block the refunds for
        # rest of the suppliers since full refund can only be created once
        supplier = context["supplier"] = get_supplier(self.request)
        if not supplier:
            context["toolbar"].append(
                URLActionButton(
                    url=reverse("shuup_admin:order.create-full-refund", kwargs={"pk": self.object.pk}),
                    icon="fa fa-dollar",
                    text=_("Refund Entire Order"),
                    extra_css_class="btn-info",
                    disable_reason=_("This order already has existing refunds") if self.object.has_refunds() else None
                )
            )

        # Setting the line_numbers choices dynamically creates issues with the blank formset,
        # So adding that to the context to be rendered manually
        context["line_number_choices"] = self._get_line_number_choices(supplier)

        lines = lines = self.object.lines.all()
        if supplier:
            lines = lines.filter(supplier=supplier)
        context["json_line_data"] = [self._get_line_data(self.object, line) for line in lines]
        return context
Beispiel #5
0
    def get_context_data(self, **kwargs):
        context = super(OrderCreateRefundView, self).get_context_data(**kwargs)
        context["title"] = _("Create Refund -- %s") % context["order"]
        context["toolbar"] = Toolbar([
            PostActionButton(
                icon="fa fa-check-circle",
                form_id="create_refund",
                text=_("Create Refund"),
                extra_css_class="btn-success",
            ),
            URLActionButton(
                url=reverse("shuup_admin:order.create-full-refund",
                            kwargs={"pk": self.object.pk}),
                icon="fa fa-dollar",
                text=_("Refund Entire Order"),
                extra_css_class="btn-info",
                disable_reason=_("This order already has existing refunds")
                if self.object.has_refunds() else None),
        ])

        # Setting the line_numbers choices dynamically creates issues with the blank formset,
        # So adding that to the context to be rendered manually
        context["line_number_choices"] = self._get_line_number_choices()
        context["json_line_data"] = [
            self._get_line_data(self.object.shop, line)
            for line in self.object.lines.all()
        ]

        return context
Beispiel #6
0
 def build_new_order_button(self):
     self.append(
         URLActionButton(url=reverse("shuup_admin:order.new") +
                         "?contact_id=%s" % self.contact.pk,
                         text=_(u"New Order"),
                         tooltip=_(u"Create an order for the contact."),
                         icon="fa fa-plus",
                         extra_css_class="btn-success"))
Beispiel #7
0
 def get_toolbar(self):
     toolbar = super(ThemeConfigDetailView, self).get_toolbar()
     toolbar.append(
         URLActionButton(text=_("Custom CSS/JS"),
                         icon="fa fa-magic",
                         url=reverse("shuup_admin:xtheme_snippet.list"),
                         extra_css_class="btn-info"))
     return toolbar
Beispiel #8
0
 def _build_edit_button(self):
     self.append(URLActionButton(
         text=_("Edit order"),
         icon="fa fa-money",
         disable_reason=_("This order cannot modified at this point") if not self.order.can_edit() else None,
         url=reverse("shuup_admin:order.edit", kwargs={"pk": self.order.pk}),
         extra_css_class="btn-info"
     ))
Beispiel #9
0
 def get_buttons_for_view(cls, view):
     return [
         URLActionButton(
             url=reverse("shuup_admin:category.organize"),
             text=_("Organize"),
             tooltip=_("Organize categories"),
             icon="fa fa-sitemap",
             extra_css_class="btn-default btn-organize-categories")
     ]
Beispiel #10
0
 def get_toolbar(self):
     toolbar = super(CategoryListView, self).get_toolbar()
     toolbar.append(
         URLActionButton(url=reverse("shuup_admin:category.organize"),
                         text=_("Organize"),
                         tooltip=_("Organize categories"),
                         icon="fa fa-sitemap",
                         extra_css_class="btn-default"))
     return toolbar
Beispiel #11
0
 def build_new_order_button(self):
     return URLActionButton(
         url=reverse("shuup_admin:order.new") + "?contact_id=%s" % self.contact.pk,
         text=_(u"New Order"),
         tooltip=_(u"Create an order for the contact."),
         icon="fa fa-shopping-cart",
         extra_css_class="dropdown-item",
         required_permissions=("order.new",),
     )
Beispiel #12
0
 def get_toolbar(self):
     toolbar = get_default_edit_toolbar(self,
                                        self.get_save_form_id(),
                                        with_split_save=False)
     toolbar.append(
         URLActionButton(text=_("Custom CSS/JS"),
                         icon="fa fa-magic",
                         url=reverse("shuup_admin:xtheme_snippet.list"),
                         extra_css_class="btn-info"))
     return toolbar
Beispiel #13
0
 def build_new_user_button(self):
     if self.user or isinstance(self.contact, CompanyContact):
         return
     return URLActionButton(
         url=reverse("shuup_admin:user.new") + "?contact_id=%s" % self.contact.pk,
         text=_(u"New User"),
         tooltip=_(u"Create a user for the contact."),
         icon="fa fa-user-plus",
         extra_css_class="dropdown-item",
         required_permissions=("user.new",),
     )
Beispiel #14
0
 def get_toolbar(self):
     return Toolbar([
         URLActionButton(
             text=_("New Script"), icon="fa fa-plus", extra_css_class="btn-success",
             url=reverse("shuup_admin:notify.script.new")
         ),
         JavaScriptActionButton(
             text=_("New From Template"), icon="fa fa-book",
             onclick="showScriptTemplates()"
         )
     ])
Beispiel #15
0
 def build_new_user_button(self):
     if self.user or isinstance(self.contact, CompanyContact):
         return
     self.append(
         URLActionButton(
             url=reverse("shuup_admin:user.new") +
             "?contact_id=%s" % self.contact.pk,
             text=_(u"New User"),
             tooltip=_(u"Create an user for the contact."),
             icon="fa fa-star",
             extra_css_class="btn-gray btn-inverse",
         ))
Beispiel #16
0
 def get_context_data(self, **kwargs):
     context = super(ScriptEditView, self).get_context_data(**kwargs)
     if self.object.pk:
         context["toolbar"] = Toolbar([
             URLActionButton(text=_(u"Edit Script Contents..."),
                             icon="fa fa-pencil",
                             extra_css_class="btn-info",
                             url=reverse(
                                 "shuup_admin:notify.script.edit-content",
                                 kwargs={"pk": self.object.pk}))
         ])
     return context
Beispiel #17
0
 def get_context_data(self, **kwargs):
     context = super(OrderCreateFullRefundView, self).get_context_data(**kwargs)
     context["title"] = _("Create Full Refund -- %s") % context["order"]
     context["toolbar"] = Toolbar([
         URLActionButton(
             url=reverse("shuup_admin:order.create-refund", kwargs={"pk": self.object.pk}),
             icon="fa fa-check-circle",
             text=_("Cancel"),
             extra_css_class="btn-danger",
         ),
     ])
     return context
Beispiel #18
0
    def get_context_data(self, **kwargs):
        context = super(ScriptEditView, self).get_context_data(**kwargs)
        if self.object.pk:
            buttons = []

            edit_button_title = _("Edit Script Contents...")

            # this script was created through a template
            # so show an option to easily edit the template
            if self.object.template:
                template_cls = get_identifier_to_object_map(
                    SCRIPT_TEMPLATES_PROVIDE_CATEGORY).get(
                        self.object.template)

                # check whether is possible to edit the script through the template editor
                if template_cls and template_cls(
                        self.object).can_edit_script():
                    # change the editor button title to advanced mode
                    edit_button_title = _("Edit Script (advanced)")

                    buttons.append(
                        URLActionButton(
                            text=_("Edit Template"),
                            icon="fa fa-pencil-square-o",
                            extra_css_class="btn-info",
                            url=reverse(
                                "shuup_admin:notify.script-template-edit",
                                kwargs={"pk": self.object.pk})))

            buttons.insert(
                0,
                URLActionButton(text=edit_button_title,
                                icon="fa fa-pencil",
                                extra_css_class="btn-info",
                                url=reverse(
                                    "shuup_admin:notify.script.edit-content",
                                    kwargs={"pk": self.object.pk})))
            context["toolbar"] = Toolbar(buttons)
        return context
Beispiel #19
0
 def build(self):
     self.append(URLActionButton(
         url=reverse("shuup_admin:contact.edit", kwargs={"pk": self.contact.pk}),
         icon="fa fa-pencil",
         text=_(u"Edit"),
         extra_css_class="btn-primary",
     ))
     self.build_renew_password_button()
     self.build_new_user_button()
     self.build_user_button()
     self.build_new_order_button()
     self.build_provides_buttons()
     self.build_login_as_button()
Beispiel #20
0
 def build(self):
     self.append(
         URLActionButton(
             url=reverse("shuup_admin:contact.edit",
                         kwargs={"pk": self.contact.pk}),
             icon="fa fa-pencil",
             text=_(u"Edit..."),
             extra_css_class="btn-info",
         ))
     self.build_renew_password_button()
     self.build_new_user_button()
     self.build_deactivate_button()
     self.build_new_order_button()
Beispiel #21
0
    def get_toolbar(self):
        save_form_id = self.get_save_form_id()
        object = self.get_object()
        delete_url = reverse_lazy("shuup_admin:service_provider.delete", kwargs={"pk": object.pk})
        toolbar = get_default_edit_toolbar(self, save_form_id, delete_url=delete_url)
        if self.object.pk:
            toolbar.append(URLActionButton(
                text=_("Create {service_name}").format(
                    service_name=self.object.service_model._meta.verbose_name),
                icon="fa fa-plus",
                url="{model_url}?provider={id}".format(
                    model_url=get_model_url(self.object.service_model, "new"),
                    id=self.object.id),
                extra_css_class="btn-info"
            ))

        return toolbar
Beispiel #22
0
 def get_toolbar(self):
     return Toolbar(
         [
             URLActionButton(
                 text=_("New Script"),
                 icon="fa fa-plus",
                 extra_css_class="btn-success",
                 url=reverse("shuup_admin:notify.script.new"),
             ),
             JavaScriptActionButton(
                 text=_("New From Template"),
                 icon="fa fa-book",
                 onclick="showScriptTemplates()",
                 required_permissions=["notify.script-template"],
             ),
         ],
         view=self,
     )
Beispiel #23
0
    request = rf.get("/")
    request.user = factories.get_default_staff_user()
    button = button_class(required_permissions=permissions, **kwargs)
    rendered_button = "".join(bit for bit in button.render(request))
    assert not rendered_button

    # Set permissions for the user
    set_permissions_for_group(request.user.groups.first(), permissions)
    rendered_button = "".join(bit for bit in button.render(request))
    assert rendered_button


@pytest.mark.parametrize(
    "button, permission, instance",
    [
        (URLActionButton(url=reverse("shuup_admin:shop_product.new")),
         "shop_product.new", URLActionButton),
        (URLActionButton(url=reverse_lazy("shuup_admin:shop_product.new")),
         "shop_product.new", URLActionButton),
        (NewActionButton.for_model(ShopProduct), "shop_product.new",
         URLActionButton),
        (SettingsActionButton.for_model(ShopProduct, return_url="/"),
         "shop_product.list_settings", URLActionButton),

        # for_model without shuup_admin url returns None
        (NewActionButton.for_model(AbstractUser), "abstract_user.new",
         type(None)),
        (SettingsActionButton.for_model(AbstractUser),
         "abstract_user.list_settings", type(None)),
    ])
def test_url_buttons_permission(rf, button, permission, instance):
Beispiel #24
0
    def get_toolbar(self):
        order = self.object
        toolbar = Toolbar()
        toolbar.append(
            URLActionButton(text=_("Create Refund"),
                            icon="fa fa-dollar",
                            disable_reason=_("This order cannot be refunded")
                            if not order.can_create_refund() else None,
                            url=reverse("shuup_admin:order.create-refund",
                                        kwargs={"pk": order.pk}),
                            extra_css_class="btn-info"))

        toolbar.append(
            URLActionButton(
                text=_("Create Payment"),
                icon="fa fa-money",
                disable_reason=_("This order cannot be paid at this point")
                if order.is_paid() else None,
                url=reverse("shuup_admin:order.create-payment",
                            kwargs={"pk": order.pk}),
                extra_css_class="btn-info"))

        toolbar.append(
            URLActionButton(text=_("Create Shipment"),
                            icon="fa fa-truck",
                            disable_reason=_("There are no products to ship")
                            if not order.get_unshipped_products() else None,
                            url=reverse("shuup_admin:order.create-shipment",
                                        kwargs={"pk": order.pk}),
                            extra_css_class="btn-info"))

        toolbar.append(
            PostActionButton(
                post_url=reverse("shuup_admin:order.set-status",
                                 kwargs={"pk": order.pk}),
                name="status",
                value=OrderStatus.objects.get_default_complete().pk,
                text=_("Set Complete"),
                icon="fa fa-check-circle",
                disable_reason=(
                    _("This order can not be set as complete at this point")
                    if not order.can_set_complete() else None),
                extra_css_class="btn-success"))

        toolbar.append(
            PostActionButton(
                post_url=reverse("shuup_admin:order.set-status",
                                 kwargs={"pk": order.pk}),
                name="status",
                value=OrderStatus.objects.get_default_canceled().pk,
                text=_("Cancel Order"),
                icon="fa fa-trash",
                disable_reason=(
                    _("Paid, shipped, or canceled orders cannot be canceled")
                    if not order.can_set_canceled() else None),
                extra_css_class="btn-danger btn-inverse"))
        toolbar.append(
            URLActionButton(
                text=_("Edit order"),
                icon="fa fa-money",
                disable_reason=_("This order cannot modified at this point")
                if not order.can_edit() else None,
                url=reverse("shuup_admin:order.edit", kwargs={"pk": order.pk}),
                extra_css_class="btn-info"))

        for button in get_provide_objects("admin_order_toolbar_button"):
            toolbar.append(button(order))

        return toolbar