예제 #1
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"),
            display="format_taxful_total_price", class_name="text-right",
            filter_config=RangeFilter(field_type="number")
        ),
    ]

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

    def format_order_date(self, instance, *args, **kwargs):
        return format_datetime(localtime(instance.order_date), locale=get_current_babel_locale())

    def format_taxful_total_price(self, instance, *args, **kwargs):
        return escape(format_home_currency(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"]}
        ]
예제 #2
0
class ContactListView(PicotableListView):
    model = Contact
    columns = [
        Column("name", _(u"Name"), linked=True, filter_config=TextFilter()),
        Column("type", _(u"Type"), display="get_type_display",
               sortable=False),  # TODO: Add a filter
        Column("email", _(u"Email"), filter_config=TextFilter()),
        Column("phone", _(u"Phone"), filter_config=TextFilter()),
        Column("is_active",
               _(u"Active"),
               filter_config=ChoicesFilter([(False, _("no")),
                                            (True, _("yes"))],
                                           default=True)),
        Column("n_orders",
               _(u"# Orders"),
               class_name="text-right",
               filter_config=RangeFilter(step=1)),
        Column("groups",
               _("Groups"),
               filter_config=ChoicesFilter(ContactGroup.objects.all(),
                                           "groups"))
    ]

    def get_queryset(self):
        groups = self.get_filter().get("groups")
        query = Q(groups__in=groups) if groups else Q()
        return super(ContactListView,
                     self).get_queryset().filter(query).annotate(
                         n_orders=Count("customer_orders"))

    def get_type_display(self, instance):
        if isinstance(instance, PersonContact):
            return _(u"Person")
        elif isinstance(instance, CompanyContact):
            return _(u"Company")
        else:
            return _(u"Contact")

    def get_object_abstract(self, instance, item):
        """
        :type instance: shoop.core.models.Contact
        """
        bits = filter(None, [
            item["type"],
            _("Active") if instance.is_active else _("Inactive"),
            _("Email: %s") % (instance.email or "\u2014"),
            _("Phone: %s") % (instance.phone or "\u2014"),
            _("%d orders") % instance.n_orders,
        ])
        return [{
            "text": instance.name or _("Contact"),
            "class": "header"
        }, {
            "text": ", ".join(bits)
        }]
예제 #3
0
파일: _list.py 프로젝트: teserak/shoop
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}
        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):
        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"]
            },
        ]