Source code for shuup.default_reports.forms

from django import forms
from django.utils.translation import gettext_lazy as _

from shuup.admin.forms.fields import ObjectSelect2MultipleField
from shuup.core.models import Carrier, Contact, OrderLineType, OrderStatus, ShippingMethod, Supplier, Tax, TaxClass
from shuup.reports.forms import BaseReportForm


[docs] class OrderReportForm(BaseReportForm):
[docs] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) customer_field = ObjectSelect2MultipleField( label=_("Customer"), model=Contact, required=False, help_text=_("Filter report results by customer."), ) customers = self.initial_contacts("customer") if customers: customer_field.initial = customers customer_field.widget.choices = [(obj.pk, obj.name) for obj in customers] orderer_field = ObjectSelect2MultipleField( label=_("Orderer"), model=Contact, required=False, help_text=_("Filter report results by the person that made the order."), ) orderers = self.initial_contacts("orderer") if orderers: orderer_field.initial = orderers orderer_field.widget.choices = [(obj.pk, obj.name) for obj in orderers] self.fields["customer"] = customer_field self.fields["orderer"] = orderer_field
[docs] def initial_contacts(self, key): if self.data and key in self.data: return Contact.objects.filter(pk__in=self.data.getlist(key)) return []
[docs] class OrderLineReportForm(BaseReportForm): order_line_type = forms.MultipleChoiceField( label=_("Order Line Type"), required=False, initial=[OrderLineType.PRODUCT.value], choices=[(line_type.value, line_type.name.capitalize()) for line_type in OrderLineType], ) # Because value of OrderLineType.PRODUCT is 1
[docs] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) supplier = ObjectSelect2MultipleField( label=_("Suppliers"), model=Supplier, required=False, help_text=_("Filter order lines by suppliers."), ) order_status = forms.ModelMultipleChoiceField( label=_("Order status"), required=False, queryset=OrderStatus.objects.all(), help_text=_("Filter order lines by status of their order."), ) suppliers = self.get_initial_suppliers("supplier") if suppliers: supplier.initial = suppliers supplier.widget.choices = [(obj.pk, obj.name) for obj in suppliers] self.fields["supplier"] = supplier self.fields["order_status"] = order_status
[docs] def get_initial_suppliers(self, key): if self.data and key in self.data: return Supplier.objects.filter(pk__in=self.data.getlist(key)) return []
[docs] class ProductTotalSalesReportForm(OrderReportForm): SORT_ORDER_CHOICES = ( ("quantity", _("Quantity")), ("taxless_total", _("Taxless Total")), ("taxful_total", _("Taxful Total")), ) order_by = forms.ChoiceField( label=_("Sort order"), initial="quantity", required=True, choices=SORT_ORDER_CHOICES, )
[docs] class NewCustomersReportForm(BaseReportForm): GROUP_BY_CHOICES = ( ("%Y", _("Year")), ("%Y-%m", _("Year/Month")), ("%Y-%m-%d", _("Year/Month/Day")), ) group_by = forms.ChoiceField( label=_("Group by"), initial=GROUP_BY_CHOICES[1], required=True, choices=GROUP_BY_CHOICES, )
[docs] class CustomerSalesReportForm(OrderReportForm): SORT_ORDER_CHOICES = ( ("order_count", _("Order Count")), ("average_sales", _("Average Sales")), ("taxless_total", _("Taxless Total")), ("taxful_total", _("Taxful Total")), ) order_by = forms.ChoiceField( label=_("Sort order"), initial="order_count", required=True, choices=SORT_ORDER_CHOICES, )
[docs] class TaxesReportForm(OrderReportForm): tax = ObjectSelect2MultipleField( label=_("Tax"), model=Tax, required=False, help_text=_("Filter report results by tax."), ) tax_class = ObjectSelect2MultipleField( label=_("Tax Class"), model=TaxClass, required=False, help_text=_("Filter report results by tax class."), )
[docs] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if self.data and "tax" in self.data: taxes = Tax.objects.filter(pk__in=self.data.getlist("tax")) self.fields["tax"].initial = taxes.first() self.fields["tax"].widget.choices = [(obj.pk, obj.name) for obj in taxes] if self.data and "tax_class" in self.data: tax_classes = TaxClass.objects.filter(pk__in=self.data.getlist("tax_class")) self.fields["tax_class"].initial = tax_classes self.fields["tax_class"].widget.choices = [(obj.pk, obj.name) for obj in tax_classes]
[docs] class ShippingReportForm(OrderReportForm): shipping_method = ObjectSelect2MultipleField( label=_("Shipping Method"), model=ShippingMethod, required=False, help_text=_("Filter report results by shipping method."), ) carrier = ObjectSelect2MultipleField( label=_("Carrier"), model=Carrier, required=False, help_text=_("Filter report results by carrier."), )
[docs] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if self.data and "shipping_method" in self.data: shipping_method = ShippingMethod.objects.filter(pk__in=self.data.getlist("shipping_method")) self.fields["shipping_method"].initial = shipping_method.first() self.fields["shipping_method"].widget.choices = [(obj.pk, obj.name) for obj in shipping_method] if self.data and "carrier" in self.data: carrier = Carrier.objects.filter(pk__in=self.data.getlist("carrier")) self.fields["carrier"].initial = carrier self.fields["carrier"].widget.choices = [(obj.pk, obj.name) for obj in carrier]