Ejemplo n.º 1
0
class OrderStatusListView(PicotableListView):
    model = OrderStatus
    default_columns = [
        Column("identifier",
               _("Identifier"),
               linked=True,
               filter_config=TextFilter(operator="startswith")),
        Column("name",
               _("Name"),
               linked=True,
               filter_config=TextFilter(operator="startswith",
                                        filter_field="translations__name")),
        Column("public_name",
               _("Public Name"),
               linked=False,
               filter_config=TextFilter(operator="startswith",
                                        filter_field="translations__name")),
        Column("role",
               _("Role"),
               linked=False,
               filter_config=ChoicesFilter(choices=OrderStatusRole.choices)),
        Column("default",
               _("Default"),
               linked=False,
               filter_config=ChoicesFilter([(False, _("yes")),
                                            (True, _("no"))])),
        Column("is_active",
               _("Active"),
               linked=False,
               filter_config=ChoicesFilter([(False, _("yes")),
                                            (True, _("no"))])),
    ]
Ejemplo n.º 2
0
class TaskListView(PicotableListView):
    model = Task
    default_columns = [
        Column("name",
               _("Name"),
               sort_field="name",
               display="name",
               filter_config=TextFilter(filter_field="name",
                                        placeholder=_("Filter by name..."))),
        Column("priority", _("Priority")),
        Column("creator",
               _("Creator"),
               filter_config=TextFilter(
                   filter_field="creator__name",
                   placeholder=_("Filter by creator..."))),
        Column("status",
               _("Status"),
               filter_config=ChoicesFilter(TaskStatus.choices)),
        Column("comments",
               _("Comments"),
               sort_field="comments",
               display="get_comments_count")
    ]

    def get_comments_count(self, instance, **kwargs):
        return instance.comments.for_contact(
            get_person_contact(self.request.user)).count()

    def get_queryset(self):
        return Task.objects.for_shop(get_shop(self.request))
Ejemplo n.º 3
0
class AttributeListView(PicotableListView):
    model = Attribute
    default_columns = [
        Column("identifier",
               _("Identifier"),
               filter_config=TextFilter(
                   filter_field="identifier",
                   placeholder=_("Filter by identifier..."))),
        Column("name",
               _("Name"),
               sort_field="translations__name",
               display="name",
               filter_config=TextFilter(filter_field="translations__name",
                                        placeholder=_("Filter by name..."))),
        Column("type",
               _("Type"),
               filter_config=ChoicesFilter(AttributeType.choices)),
        Column("visibility_mode",
               _("Visibility Mode"),
               filter_config=ChoicesFilter(AttributeVisibility.choices)),
        Column("searchable", _("Searchable")),
        Column("n_product_types", _("Used in # Product Types")),
    ]
    toolbar_buttons_provider_key = "attribute_list_toolbar_provider"
    mass_actions_provider_key = "attribute_list_mass_actions_provider"

    def get_queryset(self):
        return Attribute.objects.all().annotate(
            n_product_types=Count("product_types"))
Ejemplo n.º 4
0
class UserListView(PicotableListView):
    model = settings.AUTH_USER_MODEL
    default_columns = [
        Column("username", _(u"Username"), filter_config=TextFilter()),
        Column("email", _(u"Email"), filter_config=TextFilter()),
        Column("first_name", _(u"First Name"), filter_config=TextFilter()),
        Column("last_name", _(u"Last Name"), filter_config=TextFilter()),
        Column(
            "is_active",
            _(u"Active"),
            filter_config=ChoicesFilter([(False, _("no")), (True, _("yes"))],
                                        default=True),
        ),
        Column("is_staff",
               _(u"Access to Admin Panel"),
               filter_config=true_or_false_filter),
    ]
    toolbar_buttons_provider_key = "user_list_toolbar_provider"
    mass_actions_provider_key = "user_list_mass_actions_provider"

    def get_model(self):
        return get_user_model()

    def get_queryset(self):
        model = self.get_model()
        qs = self.get_model().objects.all()
        if "date_joined" in [f.name for f in model._meta.get_fields()]:
            qs = qs.order_by("-date_joined")

        # non superusers can't see superusers
        if not self.request.user.is_superuser:
            qs = qs.filter(is_superuser=False)

        return qs

    def get_context_data(self, **kwargs):
        context = super(UserListView, self).get_context_data(**kwargs)
        context["title"] = force_text(
            self.get_model()._meta.verbose_name_plural).title()
        return context

    def get_object_abstract(self, instance, item):
        bits = filter(None, [
            _("First Name: %s") %
            (getattr(instance, 'first_name', None) or "\u2014"),
            _("Last Name: %s") %
            (getattr(instance, 'last_name', None) or "\u2014"),
            _("Active") if instance.is_active else _(u"Inactive"),
            _("Email: %s") % (getattr(instance, 'email', None) or "\u2014"),
            _("Access to Admin Panel")
            if getattr(instance, 'is_staff', None) else None,
            _("Superuser (Full rights)")
            if getattr(instance, 'is_superuser', None) else None
        ])
        return [{
            "text": instance.get_username() or _("User"),
            "class": "header"
        }, {
            "text": ", ".join([force_text(bit) for bit in bits])
        }]
Ejemplo n.º 5
0
class ProductListView(PicotableListView):
    model = Product
    columns = [
        Column("sku",
               _(u"SKU"),
               display="sku",
               filter_config=TextFilter(placeholder=_("Filter by SKU..."))),
        Column("name",
               _(u"Name"),
               sort_field="translations__name",
               display="name",
               filter_config=TextFilter(filter_field="translations__name",
                                        placeholder=_("Filter by name..."))),
        Column("barcode",
               _(u"Barcode"),
               display="barcode",
               filter_config=TextFilter(_("Filter by barcode..."))),
        Column("type", _(u"Type")),
        Column("mode",
               _(u"Mode"),
               filter_config=ChoicesFilter(ProductMode.choices)),
        Column("category",
               _(u"Primary Category"),
               filter_config=ChoicesFilter(Category.objects.all(),
                                           "category")),
    ]

    def get_queryset(self):
        filter = self.get_filter()
        shop_id = filter.get("shop")
        qs = Product.objects.all_except_deleted()
        q = Q()
        for mode in filter.get("modes", []):
            q |= Q(mode=mode)
        manufacturer_ids = filter.get("manufacturers")
        if manufacturer_ids:
            q |= Q(manufacturer_id__in=manufacturer_ids)
        qs = qs.filter(q)
        if shop_id:
            qs = qs.filter(shop_products__shop_id=int(shop_id))
        return qs

    def get_object_abstract(self, instance, item):
        return [{
            "text": "%s" % instance,
            "class": "header"
        }, {
            "title": _(u"Barcode"),
            "text": item["barcode"]
        }, {
            "title": _(u"SKU"),
            "text": item["sku"]
        }, {
            "title": _(u"Type"),
            "text": item["type"]
        }, {
            "title": _(u"Primary Category"),
            "text": item["category"]
        }]
Ejemplo n.º 6
0
class StocksListView(PicotableListView):
    template_name = "shuup/simple_supplier/admin/base_picotable.jinja"
    model = Product
    default_columns = [
        Column(
            "sku", _("SKU"), sort_field="product__sku", display="product__sku", linked=True,
            filter_config=TextFilter(filter_field="product__sku", placeholder=_("Filter by SKU..."))
        ),
        Column(
            "name", _("Name"), sort_field="product__translations__name", display="product__name", linked=True,
            filter_config=TextFilter(filter_field="product__translations__name", placeholder=_("Filter by name..."))
        ),
        Column(
            "supplier", _("Supplier"), display="supplier", linked=False,
            filter_config=ChoicesFilter(Supplier.objects.enabled().filter(module_identifier="simple_supplier"))
        ),
        Column(
            "stock_information", _("Stock information"), display="get_stock_information",
            linked=False, sortable=False, raw=True
        ),
        Column(
            "adjust_stock", _("Adjust stock"), display="get_stock_adjustment_form",
            sortable=False, linked=False, raw=True
        )
    ]

    def __init__(self):
        super(StocksListView, self).__init__()
        self.columns = self.default_columns

    def get_object_abstract(self, instance, item):
        item.update({"_linked_in_mobile": False, "_url": ""})
        return [
            {"text": item.get("name"), "class": "header"},
            {"title": "", "text": item.get("sku")},
            {"title": "", "text": " ", "raw": item.get("stock_information")},
            {"title": "", "text": " ", "raw": item.get("adjust_stock")},
        ]

    def get_queryset(self):
        return StockCount.objects.filter(
            supplier__module_identifier="simple_supplier",
            supplier__enabled=True,
            supplier__stock_managed=True,
            product__deleted=False
        ).order_by("product__id")

    def get_context_data(self, **kwargs):
        context = super(PicotableListView, self).get_context_data(**kwargs)
        context["toolbar"] = None
        context["title"] = _("Stock management")
        return context

    def get_stock_information(self, instance):
        return get_stock_information_html(instance.supplier, instance.product)

    def get_stock_adjustment_form(self, instance):
        return get_stock_adjustment_div(self.request, instance.supplier, instance.product)
Ejemplo n.º 7
0
class OrderStatusListView(PicotableListView):
    model = OrderStatus
    default_columns = [
        Column("identifier",
               _("Identifier"),
               linked=True,
               filter_config=TextFilter(operator="startswith")),
        Column(
            "name",
            _("Name"),
            linked=True,
            filter_config=TextFilter(operator="startswith",
                                     filter_field="translations__name"),
        ),
        Column(
            "public_name",
            _("Public Name"),
            linked=False,
            filter_config=TextFilter(operator="startswith",
                                     filter_field="translations__name"),
        ),
        Column("role",
               _("Role"),
               linked=False,
               filter_config=ChoicesFilter(choices=OrderStatusRole.choices)),
        Column("default",
               _("Default"),
               linked=False,
               filter_config=ChoicesFilter([(False, _("yes")),
                                            (True, _("no"))])),
        Column(
            "allowed_next_statuses",
            _("Allowed Next Status"),
            linked=False,
            display="get_allowed_next_statuses_display",
        ),
        Column(
            "visible_for_customer",
            _("Visible For Customer"),
            linked=False,
            filter_config=ChoicesFilter([(False, _("yes")), (True, _("no"))]),
        ),
        Column("is_active",
               _("Active"),
               linked=False,
               filter_config=ChoicesFilter([(False, _("yes")),
                                            (True, _("no"))])),
    ]

    def get_allowed_next_statuses_display(self, instance):
        order_status_names = [
            order_status.name
            for order_status in instance.allowed_next_statuses.all()
        ]
        return ", ".join(order_status_names) if order_status_names else _(
            "No allowed next status.")
Ejemplo n.º 8
0
class UserListView(PicotableListView):
    model = settings.AUTH_USER_MODEL
    default_columns = [
        Column("username", _(u"Username"), filter_config=TextFilter()),
        Column("email", _(u"Email"), filter_config=TextFilter()),
        Column("first_name", _(u"First Name"), filter_config=TextFilter()),
        Column("last_name", _(u"Last Name"), filter_config=TextFilter()),
        Column("is_active",
               _(u"Active"),
               filter_config=ChoicesFilter([(False, _("no")),
                                            (True, _("yes"))],
                                           default=True)),
        Column("is_staff", _(u"Staff"), filter_config=true_or_false_filter),
        Column("is_superuser",
               _(u"Superuser"),
               filter_config=true_or_false_filter),
    ]

    def get_model(self):
        return get_user_model()

    def get_queryset(self):
        model = self.get_model()
        qs = self.get_model().objects.all()
        if "date_joined" in model._meta.get_all_field_names():
            qs = qs.order_by("-date_joined")
        return qs

    def get_context_data(self, **kwargs):
        context = super(UserListView, self).get_context_data(**kwargs)
        context["title"] = force_text(
            self.get_model()._meta.verbose_name_plural).title()
        return context

    def get_object_abstract(self, instance, item):
        bits = filter(None, [
            _("First Name: %s") %
            (getattr(instance, 'first_name', None) or "\u2014"),
            _("Last Name: %s") %
            (getattr(instance, 'last_name', None) or "\u2014"),
            _("Active") if instance.is_active else _(u"Inactive"),
            _("Email: %s") % (getattr(instance, 'email', None) or "\u2014"),
            _("Staff") if getattr(instance, 'is_staff', None) else None,
            _("Superuser") if getattr(instance, 'is_superuser', None) else None
        ])
        return [{
            "text": instance.get_username() or _("User"),
            "class": "header"
        }, {
            "text": ", ".join([force_text(bit) for bit in bits])
        }]
Ejemplo n.º 9
0
class TaskListView(PicotableListView):
    model = Task
    default_columns = [
        Column(
            "name",
            _("Name"),
            sort_field="name",
            display="name",
            filter_config=TextFilter(filter_field="name",
                                     placeholder=_("Filter by name...")),
        ),
        Column(
            "creator",
            _("Creator"),
            display="get_creator_name_display",
            filter_config=TextFilter(filter_field="creator__name",
                                     placeholder=_("Filter by creator...")),
        ),
        Column("status",
               _("Status"),
               filter_config=ChoicesFilter(TaskStatus.choices),
               class_name="text-center"),
        Column("priority",
               _("Priority"),
               display="get_priority_display",
               class_name="text-center"),
        Column("comments",
               _("Comments"),
               sort_field="comments",
               display="get_comments_count",
               class_name="text-center"),
    ]
    toolbar_buttons_provider_key = "task_list_toolbar_provider"
    mass_actions_provider_key = "task_list_actions_provider"

    def get_comments_count(self, instance, **kwargs):
        return instance.comments.for_contact(
            get_person_contact(self.request.user)).count()

    def get_queryset(self):
        return Task.objects.for_shop(get_shop(self.request))

    def get_creator_name_display(self, instance, **kwargs):
        if not len(instance.creator.name):
            return "No name set (id: %d)" % instance.creator.id
        return instance.creator.name

    def get_priority_display(self, instance, **kwargs):
        return "%s" % instance.priority
Ejemplo n.º 10
0
class APIAccessListView(PicotableListView):
    model = APIAccess
    default_columns = [
        Column("name",
               _("Name"),
               sort_field="name",
               display="name",
               filter_config=TextFilter(filter_field="name",
                                        placeholder=_("Filter by name..."))),
        Column("key",
               _("Key"),
               filter_config=TextFilter(filter_field="key",
                                        placeholder=_("Filter by key..."))),
        Column("enabled", _("Enabled"))
    ]
Ejemplo n.º 11
0
class ContactGroupListView(PicotableListView):
    model = ContactGroup
    default_columns = [
        Column(
            "name",
            _("Name"),
            sort_field="translations__name",
            display="name",
            filter_config=TextFilter(filter_field="translations__name",
                                     placeholder=_("Filter by name...")),
        ),
        Column("n_members", _("Number of Members")),
    ]
    toolbar_buttons_provider_key = "contact_group_list_toolbar_provider"
    mass_actions_provider_key = "contact_group_list_mass_actions_provider"

    def get_queryset(self):
        return ContactGroup.objects.all_except_defaults().annotate(
            n_members=Count("members"))

    def get_context_data(self, **kwargs):
        context = super(ContactGroupListView, self).get_context_data(**kwargs)
        if self.request.user.is_superuser:
            settings_button = SettingsActionButton.for_model(
                ContactGroup, return_url="contact_group")
        else:
            settings_button = None
        context["toolbar"] = Toolbar([
            NewActionButton("shuup_admin:contact_group.new"), settings_button
        ],
                                     view=self)
        return context
Ejemplo n.º 12
0
class CampaignListView(PicotableListView):
    default_columns = [
        Column(
            "name", _(u"Title"), sort_field="name", display="name", linked=True,
            filter_config=TextFilter(operator="startswith")
        ),
        Column("start_datetime", _("Starts")),
        Column("end_datetime", _("Ends")),
        Column("active", _("Active"), filter_config=ChoicesFilter(choices=[(0, _("No")), (1, _("Yes"))])),
    ]

    def start_datetime(self, instance, *args, **kwargs):
        if not instance.start_datetime:
            return ""
        return self._formatted_datetime(instance.start_datetime)

    def end_datetime(self, instance, *args, **kwargs):
        if not instance.end_datetime:
            return ""
        return self._formatted_datetime(instance.end_datetime)

    def _formatted_datetime(self, dt):
        return format_datetime(localtime(dt), locale=get_current_babel_locale())

    def get_object_abstract(self, instance, item):
        return [
            {"text": "%s" % (instance or _("CatalogCampaign")), "class": "header"},
        ]
Ejemplo n.º 13
0
class PageListView(PicotableListView):
    url_identifier = "simple_cms.page"
    model = Page
    default_columns = [
        Column("title",
               _(u"Title"),
               sort_field="translations__title",
               display="title",
               linked=True,
               filter_config=TextFilter(operator="startswith",
                                        filter_field="translations__title")),
        Column("available_from", _(u"Available from")),
        Column("available_to", _(u"Available to")),
        Column("created_by", _(u"Created by")),
        Column("created_on", _(u"Date created")),
    ]

    def get_object_abstract(self, instance, item):
        return [{
            "text": "%s" % (instance or _("Page")),
            "class": "header"
        }, {
            "title": _(u"Available from"),
            "text": item.get("available_from")
        }, {
            "title": _(u"Available to"),
            "text": item.get("available_to")
        } if instance.available_to else None]

    def get_queryset(self):
        return super(PageListView, self).get_queryset().for_shop(
            get_shop(self.request)).filter(deleted=False)
Ejemplo n.º 14
0
class FontFamilyListView(PicotableListView):
    url_identifier = "typography_font"
    model = FontFamily
    default_columns = [
        Column("name",
               _("Name"),
               sort_field="name",
               display="name",
               filter_config=TextFilter(filter_field="name",
                                        placeholder=_("Filter by name..."))),
        Column("woff", _("Woff"), display="format_woff"),
        Column("woff2", _("Woff2"), display="format_woff2"),
        Column("ttf", _("TTF"), display="format_ttf"),
        Column("svg", _("SVG"), display="format_svg"),
        Column("eot", _("EOT"), display="format_eot")
    ]

    def format_eot(self, instance):
        return instance.eot.label if instance.eot else ""

    def format_ttf(self, instance):
        return instance.ttf.label if instance.ttf else ""

    def format_woff(self, instance):
        return instance.woff.label if instance.woff else ""

    def format_woff2(self, instance):
        return instance.woff2.label if instance.woff2 else ""

    def format_svg(self, instance):
        return instance.svg.label if instance.svg else ""

    def get_queryset(self):
        return FontFamily.objects.filter(shop=get_shop(self.request))
Ejemplo n.º 15
0
class CouponListView(PicotableListView):
    model = Coupon
    default_columns = [
        Column("code",
               _(u"Code"),
               sort_field="code",
               display="code",
               linked=True,
               filter_config=TextFilter(operator="startswith")),
        Column("usages", _("Usages"), display="get_usages"),
        Column("usage_limit_customer", _("Usages Limit per contact")),
        Column("usage_limit", _("Usage Limit")),
        Column("active", _("Active")),
        Column("created_by", _(u"Created by")),
        Column("created_on", _(u"Date created")),
    ]

    def get_usages(self, instance, *args, **kwargs):
        return instance.usages.count()

    def get_context_data(self, **kwargs):
        context = super(CouponListView, self).get_context_data(**kwargs)
        if self.request.user.is_superuser:
            settings_button = SettingsActionButton.for_model(
                self.model, return_url="coupon")
        else:
            settings_button = None
        context["toolbar"] = Toolbar([
            NewActionButton("shuup_admin:coupon.new",
                            text=_("Create new Coupon")), settings_button
        ])
        return context
Ejemplo n.º 16
0
class PermissionGroupListView(PicotableListView):
    model = PermissionGroup
    default_columns = [
        Column("name",
               _(u"Name"),
               sort_field="name",
               display="name",
               filter_config=TextFilter(filter_field="name",
                                        placeholder=_("Filter by name..."))),
    ]
    toolbar_buttons_provider_key = "permission_group_list_toolbar_provider"

    def get_context_data(self, **kwargs):
        context = super(PermissionGroupListView,
                        self).get_context_data(**kwargs)
        context["title"] = _("Permission Groups")
        if self.request.user.is_superuser:
            settings_button = SettingsActionButton.for_model(
                self.model, return_url="permission_group")
        else:
            settings_button = None
        context["toolbar"] = Toolbar([
            NewActionButton("shuup_admin:permission_group.new",
                            text=_("Create new Permission Group")),
            settings_button
        ],
                                     view=self)
        return context
Ejemplo n.º 17
0
class ServiceProviderListView(PicotableListView):
    model = ServiceProvider
    default_columns = [
        Column(
            "name",
            _("Name"),
            sort_field="base_translations__name",
            filter_config=TextFilter(filter_field="base_translations__name",
                                     placeholder=_("Filter by name...")),
        ),
        Column("type", _("Type"), display="get_type_display", sortable=False),
    ]
    toolbar_buttons_provider_key = "service_provider_list_toolbar_provider"
    mass_actions_provider_key = "service_provider_mass_actions_provider"

    def get_type_display(self, instance):
        return instance._meta.verbose_name.capitalize()

    def get_object_abstract(self, instance, item):
        return [
            {
                "text": "%s" % instance,
                "class": "header"
            },
            {
                "text": self.get_type_display(instance)
            },
        ]
Ejemplo n.º 18
0
class CouponCodeListView(PicotableListView):
    model = CouponCode
    url_identifier = "discounts_coupon_codes"

    default_columns = [
        Column(
            "code",
            _("Code"),
            sort_field="code",
            display="code",
            linked=True,
            filter_config=TextFilter(operator="startswith"),
        ),
        Column("usages", _("Usages"), display="get_usages"),
        Column("usage_limit_customer", _("Usages Limit per contact")),
        Column("usage_limit", _("Usage Limit")),
        Column("active", _("Active")),
        Column("created_by", _("Created by")),
        Column("created_on", _("Date created")),
    ]

    def get_usages(self, instance, *args, **kwargs):
        return instance.usages.count()

    def get_queryset(self):
        return CouponCode.objects.filter(shops=get_shop(self.request))
Ejemplo n.º 19
0
class ServiceListView(PicotableListView):
    model = None  # Override in subclass
    columns = []
    base_columns = [
        Column("name",
               _("Name"),
               sort_field="translations__name",
               filter_config=TextFilter(filter_field="translations__name",
                                        placeholder=_("Filter by name..."))),
        Column(
            "choice_identifier",
            _(u"Service choice"),
            display="format_service_choice",
            sortable=False,
        ),
        Column("enabled", _(u"Enabled"), filter_config=true_or_false_filter),
        Column("shop", _(u"Shop"))
    ]

    def get_object_abstract(self, instance, item):
        return [
            {
                "text": "%s" % instance,
                "class": "header"
            },
        ]

    def format_service_choice(self, instance, *args, **kwargs):
        if instance.provider:
            for choice in instance.provider.get_service_choices():
                if choice.identifier == instance.choice_identifier:
                    return str(choice.name)
Ejemplo n.º 20
0
Archivo: list.py Proyecto: rogasp/shuup
class ShopListView(PicotableListView):
    model = Shop
    default_columns = [
        Column("logo",
               _(u"Logo"),
               display="logo",
               class_name="text-center",
               raw=True,
               ordering=1,
               sortable=False),
        Column("name",
               _(u"Name"),
               sort_field="translations__name",
               display="name",
               filter_config=TextFilter(filter_field="translations__name",
                                        placeholder=_("Filter by name..."))),
        Column("domain", _(u"Domain")),
        Column("identifier", _(u"Identifier")),
        Column("status",
               _(u"Status"),
               filter_config=ChoicesFilter(choices=ShopStatus.choices)),
    ]

    def get_queryset(self):
        if self.request.user.is_superuser:
            return super(ShopListView, self).get_queryset()
        else:
            return Shop.objects.get_for_user(self.request.user)

    def get_toolbar(self):
        if ShuupSettings.get_setting("SHUUP_ENABLE_MULTIPLE_SHOPS"):
            return super(ShopListView, self).get_toolbar()
        else:
            return Toolbar([])
Ejemplo n.º 21
0
class PageListView(PicotableListView):
    model = Page
    columns = [
        Column("title",
               _(u"Title"),
               sort_field="translations__title",
               display="title",
               linked=True,
               filter_config=TextFilter(operator="startswith")),
        Column("available_from", _(u"Available from")),
        Column("available_to", _(u"Available to")),
        Column("created_by", _(u"Created by")),
        Column("created_on", _(u"Date created")),
    ]

    def get_object_abstract(self, instance, item):
        return [{
            "text": "%s" % (instance or _("Page")),
            "class": "header"
        }, {
            "title": _(u"Available from"),
            "text": item["available_from"]
        }, {
            "title": _(u"Available to"),
            "text": item["available_to"]
        } if instance.available_to else None]
Ejemplo n.º 22
0
    def _get_translated_column(self, model, field, known_names, identifier):
        field_name = field.verbose_name.title()
        if identifier:
            field_name = "%s %s" % (identifier.replace(
                "_", " ").capitalize(), field_name)

        # take the first extension, usually we should not have more then one
        translation_rel_name = model._parler_meta._extensions[0].rel_name

        if model != self.model:
            filter_field = "%s__%s__%s" % (
                identifier, translation_rel_name,
                field.name) if identifier else field.name
        else:
            filter_field = "%s__%s" % (translation_rel_name, field.name)

        display = "%s__%s" % (identifier,
                              field.name) if identifier else field.name

        column = Column(
            "%s_%s" % ((identifier if identifier else model.__name__.lower()),
                       field.name),
            field_name,
            sort_field=display,
            display=display,
            filter_config=TextFilter(filter_field=filter_field,
                                     placeholder=field_name),
        )
        return self.handle_special_column(field, column)[0]
Ejemplo n.º 23
0
class SupplierListView(PicotableListView):
    model = Supplier
    default_columns = [
        Column("name",
               _(u"Name"),
               sort_field="name",
               display="name",
               filter_config=TextFilter(filter_field="name",
                                        placeholder=_("Filter by name..."))),
        Column("type", _(u"Type")),
        Column("module_identifier",
               _(u"Module"),
               display="get_module_display",
               sortable=True)
    ]

    def get_module_display(self, instance):
        return instance.module.name or _(
            "No %s module") % self.model._meta.verbose_name

    def get_toolbar(self):
        if settings.SHUUP_ENABLE_MULTIPLE_SUPPLIERS:
            return super(SupplierListView, self).get_toolbar()
        else:
            return Toolbar([])
Ejemplo n.º 24
0
class SupplierListView(PicotableListView):
    model = Supplier
    default_columns = [
        Column("name",
               _(u"Name"),
               sort_field="name",
               display="name",
               filter_config=TextFilter(filter_field="name",
                                        placeholder=_("Filter by name..."))),
        Column("type", _(u"Type")),
        Column("module_identifier",
               _(u"Module"),
               display="get_module_display",
               sortable=True)
    ]
    toolbar_buttons_provider_key = "supplier_list_toolbar_provider"
    mass_actions_provider_key = "supplier_list_mass_actions_provider"

    def get_queryset(self):
        return Supplier.objects.filter(
            Q(shops=get_shop(self.request))
            | Q(shops__isnull=True)).not_deleted()

    def get_module_display(self, instance):
        return instance.module.name or _(
            "No %s module") % self.model._meta.verbose_name

    def get_toolbar(self):
        if settings.SHUUP_ENABLE_MULTIPLE_SUPPLIERS:
            return super(SupplierListView, self).get_toolbar()
        else:
            return Toolbar.for_view(self)
Ejemplo n.º 25
0
def test_picotable_correctly_sorts_translated_fields(rf, admin_user,
                                                     regular_user):
    """
    Make sure that translated fields, such as product names, are correctly sorted
    """
    populate_if_required()

    columns = [
        Column("id", "Id", filter_config=Filter(), display=instance_id),
        Column("name",
               "Name",
               sort_field="translations__name",
               filter_config=TextFilter(filter_field="translations__name")),
    ]

    pico = get_pico(rf, admin_user, model=Product, columns=columns)

    # Verify ascending sort
    sorted_products = pico.get_data({
        "perPage": 100,
        "page": 1,
        "sort": "+name"
    })
    sorted_names = [p["name"] for p in sorted_products["items"]]
    assert sorted_names == sorted(sorted_names)

    # Verify descending sort
    sorted_products = pico.get_data({
        "perPage": 100,
        "page": 1,
        "sort": "-name"
    })
    sorted_names = [p["name"] for p in sorted_products["items"]]
    assert sorted_names == sorted(sorted_names, reverse=True)
Ejemplo n.º 26
0
class AvailabilityExceptionListView(PicotableListView):
    model = AvailabilityException
    url_identifier = "discounts_availability_exception"

    default_columns = [
        Column(
            "name", _("Exception Name"), sort_field="name", display="name",
            filter_config=TextFilter(filter_field="name", placeholder=_("Filter by name..."))
        ),
        Column(
            "start_datetime", _("Start Date and Time"), display="format_start_datetime", filter_config=DateRangeFilter()
        ),
        Column(
            "end_datetime", _("End Date and Time"), display="format_end_datetime", filter_config=DateRangeFilter()
        )
    ]

    def get_queryset(self):
        return AvailabilityException.objects.filter(shops=get_shop(self.request))

    def format_start_datetime(self, instance, *args, **kwargs):
        return get_locally_formatted_datetime(instance.start_datetime) if instance.start_datetime else ""

    def format_end_datetime(self, instance, *args, **kwargs):
        return get_locally_formatted_datetime(instance.end_datetime) if instance.end_datetime else ""
Ejemplo n.º 27
0
def get_pico(rf, admin_user, model=None, columns=None):
    shop = get_default_shop()
    model = model or get_user_model()
    columns = columns or [
        Column("id", "Id", filter_config=Filter(), display=instance_id),
        Column("username",
               "Username",
               sortable=False,
               filter_config=MultiFieldTextFilter(
                   filter_fields=("username", "email"), operator="iregex")),
        Column("email", "Email", sortable=False, filter_config=TextFilter()),
        Column("is_superuser",
               "Is Superuser",
               display="superuser_display",
               filter_config=ChoicesFilter(choices=false_and_true())),
        Column("is_active",
               "Is Active",
               filter_config=ChoicesFilter(
                   choices=false_and_true)),  # `choices` callable
        Column("date_joined", "Date Joined", filter_config=DateRangeFilter())
    ]
    admin_user.is_staff = True
    admin_user.save()
    shop.staff_members.add(admin_user)
    request = apply_request_middleware(rf.get("/"), user=admin_user)
    return Picotable(request=request,
                     columns=columns,
                     mass_actions=[],
                     queryset=model.objects.all(),
                     context=PicoContext(request))
Ejemplo n.º 28
0
class SnippetListView(PicotableListView):
    model = Snippet
    default_columns = [
        Column(
            "location",
            _("Location"),
            sort_field="location",
            filter_config=TextFilter(
                filter_field="location",
                placeholder=_("Filter by location...")
            )
        ),
        Column("snippet_type", _("Type"), sort_field="snippet_type"),
        Column("themes", _("Themes"), display="get_themes")
    ]

    def get_themes(self, value):
        return ", ".join([
            force_text(theme.name)
            for theme in get_provide_objects("xtheme")
            if theme.identifier in value.themes
        ])

    def get_queryset(self):
        return Snippet.objects.filter(shop=get_shop(self.request))
Ejemplo n.º 29
0
    def _get_column(self, model, field, known_names, identifier):
        if not self._valid_field(field.name):
            return None

        field_name = field.verbose_name.title()
        if identifier:
            field_name = "%s %s" % (identifier.replace(
                "_", " ").capitalize(), field_name)

        display = "%s__%s" % (identifier,
                              field.name) if identifier else field.name

        column = Column(
            "%s_%s" % ((identifier if identifier else model.__name__.lower()),
                       field.name),
            field_name,
            display=display)

        column, is_special = self.handle_special_column(field, column)
        if not is_special:
            if isinstance(field, CharField):
                column.filter_config = TextFilter(filter_field=field.name,
                                                  placeholder=field_name)
            if isinstance(field, EnumIntegerField):
                column.filter_config = ChoicesFilter(field.choices)
            if isinstance(field, BooleanField):
                column.filter_config = true_or_false_filter
        return column
Ejemplo n.º 30
0
class CurrencyListView(PicotableListView):
    model = Currency

    default_columns = [
        Column("name",
               _("Name"),
               display="get_currency_display",
               sortable=False),
        Column("code",
               _(u"Code"),
               sort_field="code",
               filter_config=TextFilter(
                   filter_field="code",
                   placeholder=_("Filter by code"),
               )),
        Column(
            "decimal_places",
            _("Decimal places"),
            display="format_decimal_places",
        )
    ]

    def format_decimal_places(self, instance):
        return "{0}".format(instance.decimal_places)

    def get_currency_display(self, instance):
        locale = get_current_babel_locale()
        return locale.currencies.get(instance.code, instance.code)