コード例 #1
0
ファイル: test_picotable.py プロジェクト: Bobby00/boss_shuup
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))
コード例 #2
0
ファイル: test_picotable.py プロジェクト: zarlant/shuup
def get_pico(rf, model=None, columns=None):
    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())
    ]

    return Picotable(request=rf.get("/"),
                     columns=columns,
                     queryset=model.objects.all(),
                     context=PicoContext())
コード例 #3
0
ファイル: test_picotable.py プロジェクト: ayeedshaikh/shuup-1
def test_choice_filter_with_default(rf, admin_user, regular_user):
    columns = [
        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("date_joined", "Date Joined", filter_config=DateRangeFilter())
    ]

    is_active = [
        Column("is_active",
               "Is Active",
               filter_config=ChoicesFilter(choices=false_and_true))
    ]
    is_active_with_default = [
        Column("is_active",
               "Is Active",
               filter_config=ChoicesFilter(choices=false_and_true,
                                           default=True))
    ]

    query = {"perPage": 100, "page": 1, "sort": "+id"}

    pico_no_defaults = get_pico(rf, columns=(columns + is_active))
    data = pico_no_defaults.get_data(query)
    user_data = data["items"][0]
    user = get_user_model().objects.get(id=user_data["id"])
    assert user.is_active

    pico_with_defaults = get_pico(rf,
                                  columns=(columns + is_active_with_default))
    data = pico_with_defaults.get_data(query)
    user_data = data["items"][0]
    user_with_defaults = get_user_model().objects.get(id=user_data["id"])
    assert user_with_defaults == user

    user.is_active = False
    user.save()

    data = pico_no_defaults.get_data(query)
    user_data = data["items"][0]
    new_user = get_user_model().objects.get(id=user_data["id"])
    assert new_user == user

    data = pico_with_defaults.get_data(query)
    user_data = data["items"][0]
    new_user_with_defaults = get_user_model().objects.get(id=user_data["id"])
    assert new_user_with_defaults != user_with_defaults
コード例 #4
0
class OrderListView(PicotableListView):
    model = Order
    columns = [
        Column("identifier",
               _(u"Order"),
               linked=True,
               filter_config=TextFilter(operator="startswith")),
        Column("order_date",
               _(u"Order Date"),
               display="format_order_date",
               filter_config=DateRangeFilter()),
        Column("customer",
               _(u"Customer"),
               filter_config=MultiFieldTextFilter(
                   filter_fields=("customer__email", "customer__name"))),
        Column("status",
               _(u"Status"),
               filter_config=ChoicesFilter(choices=OrderStatus.objects.all())),
        Column("payment_status",
               _(u"Payment Status"),
               filter_config=ChoicesFilter(choices=PaymentStatus.choices)),
        Column("shipping_status",
               _(u"Shipping Status"),
               filter_config=ChoicesFilter(choices=ShippingStatus.choices)),
        Column("taxful_total_price",
               _(u"Total"),
               sort_field="taxful_total_price_value",
               display="format_taxful_total_price",
               class_name="text-right",
               filter_config=RangeFilter(
                   field_type="number",
                   filter_field="taxful_total_price_value")),
    ]

    def get_queryset(self):
        return super(OrderListView, self).get_queryset().exclude(deleted=True)

    def format_order_date(self, instance, *args, **kwargs):
        return get_locally_formatted_datetime(instance.order_date)

    def format_taxful_total_price(self, instance, *args, **kwargs):
        return escape(format_money(instance.taxful_total_price))

    def get_object_abstract(self, instance, item):
        return [{
            "text": "%s" % instance,
            "class": "header"
        }, {
            "title": _(u"Total"),
            "text": item["taxful_total_price"]
        }, {
            "title": _(u"Status"),
            "text": item["status"]
        }]
コード例 #5
0
ファイル: _list.py プロジェクト: stjordanis/shuup
class CartListView(PicotableListView):
    model = StoredBasket
    default_columns = [
        Column("key", _(u"Key"), filter_config=TextFilter(filter_field="key")),
        Column("updated_on",
               _(u"Last updated on"),
               display="format_updated_date",
               filter_config=DateRangeFilter()),
        Column("finished",
               _("Completed"),
               display="format_finished_status",
               filter_config=ChoicesFilter([(True, _("yes")),
                                            (False, _("no"))],
                                           filter_field="finished",
                                           default=False)),
        Column("shop",
               _("Shop"),
               filter_config=TextFilter(
                   filter_field="shop__translations__public_name")),
        Column("supplier",
               _("Supplier"),
               filter_config=TextFilter(filter_field="supplier__name")),
        Column("customer",
               _(u"Customer"),
               filter_config=MultiFieldTextFilter(
                   filter_fields=("customer__email", "customer__name"))),
        Column("product_count",
               _("Product count"),
               filter_config=RangeFilter()),
        Column("taxful_total_price",
               _(u"Total"),
               sort_field="taxful_total_price_value",
               display="format_taxful_total_price",
               class_name="text-right",
               filter_config=RangeFilter(
                   field_type="number",
                   filter_field="taxful_total_price_value")),
    ]
    toolbar_buttons_provider_key = "cart_list_toolbar_provider"
    mass_actions_provider_key = "cart_list_actions_provider"

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

    def get_queryset(self):
        """
        Ignore potentially active carts, displaying only those not updated for at least 2 hours.
        """
        shop = get_shop(self.request)
        filters = {"product_count__gte": 0, "persistent": False, "shop": shop}
        return super(CartListView, self).get_queryset().filter(**filters)

    def format_finished_status(self, instance, *args, **kwargs):
        return "yes" if instance.finished else "no"

    def format_updated_date(self, instance, *args, **kwargs):
        return get_locally_formatted_datetime(instance.updated_on)

    def format_taxful_total_price(self, instance, *args, **kwargs):
        if not instance.taxful_total_price:
            return ""
        return escape(format_money(instance.taxful_total_price))

    def get_context_data(self, **kwargs):
        context = super(CartListView, self).get_context_data(**kwargs)
        context["title"] = _("Carts")
        return context

    def get_object_abstract(self, instance, item):
        return [
            {
                "text": "%s" % instance,
                "class": "header"
            },
            {
                "title": _(u"Created on"),
                "text": item.get("created_on")
            },
            {
                "title": _(u"Last updated on"),
                "text": item.get("updated_on")
            },
            {
                "title": _(u"Ordered"),
                "text": item.get("finished")
            },
            {
                "title": _(u"Total"),
                "text": item.get("taxful_total_price")
            },
        ]
コード例 #6
0
ファイル: list.py プロジェクト: vinothkumart/django-shuup
class OrderListView(PicotableListView):
    model = Order
    default_columns = [
        Column("identifier",
               _(u"Order"),
               linked=True,
               filter_config=TextFilter(operator="startswith")),
        Column("order_date",
               _(u"Order Date"),
               display="format_order_date",
               filter_config=DateRangeFilter()),
        Column("customer",
               _(u"Customer"),
               display="format_customer_name",
               filter_config=MultiFieldTextFilter(
                   filter_fields=("customer__email", "customer__name",
                                  "billing_address__name",
                                  "shipping_address__name", "orderer__name"))),
        Column(
            "status",
            _(u"Status"),
            filter_config=ChoicesFilter(choices=OrderStatus.objects.all()),
        ),
        Column("payment_status",
               _(u"Payment Status"),
               filter_config=ChoicesFilter(choices=PaymentStatus.choices)),
        Column("shipping_status",
               _(u"Shipping Status"),
               filter_config=ChoicesFilter(choices=ShippingStatus.choices)),
        Column("taxful_total_price_value",
               _(u"Total"),
               sort_field="taxful_total_price_value",
               display="format_taxful_total_price",
               class_name="text-right",
               filter_config=RangeFilter(
                   field_type="number",
                   filter_field="taxful_total_price_value")),
    ]
    related_objects = [
        ("shop", "shuup.core.models:Shop"),
        ("billing_address", "shuup.core.models:ImmutableAddress"),
        ("shipping_address", "shuup.core.models:ImmutableAddress"),
    ]
    mass_actions = [
        "shuup.admin.modules.orders.mass_actions:CancelOrderAction",
        "shuup.admin.modules.orders.mass_actions:OrderConfirmationPdfAction",
        "shuup.admin.modules.orders.mass_actions:OrderDeliveryPdfAction",
    ]
    toolbar_buttons_provider_key = "order_list_toolbar_provider"
    mass_actions_provider_key = "order_list_mass_actions_provider"

    def get_toolbar(self):
        toolbar = Toolbar([
            NewActionButton.for_model(Order,
                                      url=reverse("shuup_admin:order.new")),
            SettingsActionButton.for_model(Order, return_url="order")
        ],
                          view=self)
        return toolbar

    def get_queryset(self):
        return super(OrderListView, self).get_queryset().exclude(
            deleted=True).filter(shop=get_shop(self.request))

    def format_customer_name(self, instance, *args, **kwargs):
        return instance.get_customer_name() or ""

    def format_order_date(self, instance, *args, **kwargs):
        return get_locally_formatted_datetime(instance.order_date)

    def format_taxful_total_price(self, instance, *args, **kwargs):
        return escape(format_money(instance.taxful_total_price))

    def label(self, instance, *args, **kwargs):
        # format label to make it human readable
        return instance.label.replace("_", " ").title()

    def get_object_abstract(self, instance, item):
        return [{
            "text": "%s" % instance,
            "class": "header"
        }, {
            "title": _(u"Total"),
            "text": item.get("taxful_total_price_value")
        }, {
            "title": _(u"Status"),
            "text": item.get("status")
        }]
コード例 #7
0
ファイル: _list.py プロジェクト: abduladi/shuup
class CartListView(PicotableListView):
    model = StoredBasket
    columns = [
        Column("created_on",
               _(u"Created on"),
               display="format_created_date",
               filter_config=DateRangeFilter()),
        Column("updated_on",
               _(u"Last updated on"),
               display="format_updated_date",
               filter_config=DateRangeFilter()),
        Column("finished",
               _("Abandoned"),
               display="format_abandoned_status",
               filter_config=ChoicesFilter([(False, _("yes")),
                                            (True, _("no"))])),
        Column("shop",
               _("Shop"),
               filter_config=ChoicesFilter(choices=Shop.objects.all())),
        Column("product_count",
               _("Product count"),
               filter_config=RangeFilter()),
        Column("customer",
               _(u"Customer"),
               filter_config=MultiFieldTextFilter(
                   filter_fields=("customer__email", "customer__name"))),
        Column("orderer",
               _(u"Orderer"),
               filter_config=MultiFieldTextFilter(
                   filter_fields=("orderer__email", "orderer__name"))),
        Column("taxful_total_price",
               _(u"Total"),
               sort_field="taxful_total_price_value",
               display="format_taxful_total_price",
               class_name="text-right",
               filter_config=RangeFilter(
                   field_type="number",
                   filter_field="taxful_total_price_value")),
    ]

    def get_queryset(self):
        """
        Ignore potentially active carts, displaying only those not updated for at least 2 hours.
        """
        cutoff = now() - datetime.timedelta(hours=2)
        filters = {
            "updated_on__lt": cutoff,
            "product_count__gte": 0,
            "persistent": False
        }
        return super(CartListView, self).get_queryset().filter(**filters)

    def format_abandoned_status(self, instance, *args, **kwargs):
        return "yes" if not instance.finished else "no"

    def format_created_date(self, instance, *args, **kwargs):
        return get_locally_formatted_datetime(instance.created_on)

    def format_updated_date(self, instance, *args, **kwargs):
        return get_locally_formatted_datetime(instance.updated_on)

    def format_taxful_total_price(self, instance, *args, **kwargs):
        if not instance.taxful_total_price:
            return ""
        return escape(format_money(instance.taxful_total_price))

    def get_context_data(self, **kwargs):
        context = super(CartListView, self).get_context_data(**kwargs)
        context["title"] = _("Carts")
        return context

    def get_object_abstract(self, instance, item):
        return [
            {
                "text": "%s" % instance,
                "class": "header"
            },
            {
                "title": _(u"Created on"),
                "text": item["created_on"]
            },
            {
                "title": _(u"Last updated on"),
                "text": item["updated_on"]
            },
            {
                "title": _(u"Ordered"),
                "text": item["finished"]
            },
            {
                "title": _(u"Total"),
                "text": item["taxful_total_price"]
            },
        ]
コード例 #8
0
ファイル: list.py プロジェクト: xhijack/shuup
class OrderListView(PicotableListView):
    model = Order
    default_columns = [
        Column("identifier",
               _(u"Order"),
               linked=True,
               filter_config=TextFilter(operator="startswith")),
        Column("order_date",
               _(u"Order Date"),
               display="format_order_date",
               filter_config=DateRangeFilter()),
        Column("customer",
               _(u"Customer"),
               display="format_customer_name",
               filter_config=MultiFieldTextFilter(
                   filter_fields=("customer__email", "customer__name",
                                  "billing_address__name",
                                  "shipping_address__name", "orderer__name"))),
        Column(
            "status",
            _(u"Status"),
            filter_config=OrderStatusChoicesFilter(
                choices=OrderStatus.objects.all()),
        ),
        Column("payment_status",
               _(u"Payment Status"),
               filter_config=ChoicesFilter(choices=PaymentStatus.choices)),
        Column("shipping_status",
               _(u"Shipping Status"),
               filter_config=ChoicesFilter(choices=ShippingStatus.choices)),
        Column("taxful_total_price_value",
               _(u"Total"),
               sort_field="taxful_total_price_value",
               display="format_taxful_total_price",
               class_name="text-right",
               filter_config=RangeFilter(
                   field_type="number",
                   filter_field="taxful_total_price_value")),
    ]
    mass_actions = [
        "shuup.admin.modules.orders.mass_actions:CancelOrderAction",
        "shuup.admin.modules.orders.mass_actions:OrderConfirmationPdfAction",
        "shuup.admin.modules.orders.mass_actions:OrderDeliveryPdfAction",
    ]

    def get_queryset(self):
        return super(OrderListView, self).get_queryset().exclude(
            deleted=True).filter(shop=self.request.shop)

    def format_customer_name(self, instance, *args, **kwargs):
        return instance.get_customer_name() or ""

    def format_order_date(self, instance, *args, **kwargs):
        return get_locally_formatted_datetime(instance.order_date)

    def format_taxful_total_price(self, instance, *args, **kwargs):
        return escape(format_money(instance.taxful_total_price))

    def get_object_abstract(self, instance, item):
        return [{
            "text": "%s" % instance,
            "class": "header"
        }, {
            "title": _(u"Total"),
            "text": item.get("taxful_total_price_value")
        }, {
            "title": _(u"Status"),
            "text": item.get("status")
        }]