diff --git a/lingo/invoicing/forms.py b/lingo/invoicing/forms.py index b2f385a..8795b92 100644 --- a/lingo/invoicing/forms.py +++ b/lingo/invoicing/forms.py @@ -19,7 +19,7 @@ import django_filters from django import forms from django.utils.translation import ugettext_lazy as _ -from lingo.invoicing.models import Campaign, DraftInvoiceLine, InvoiceLine, Regie +from lingo.invoicing.models import Campaign, DraftInvoice, DraftInvoiceLine, Invoice, InvoiceLine, Regie class CampaignForm(forms.ModelForm): @@ -51,17 +51,74 @@ def regie_queryset(request): return Regie.objects.all() +class AbstractInvoiceFilterSet(django_filters.FilterSet): + regie = django_filters.ModelChoiceFilter( + label=_('Regie'), + queryset=regie_queryset, + ) + # for Invoice + number = django_filters.CharFilter( + label=_('Invoice number'), + field_name='formatted_number', + lookup_expr='contains', + ) + # for DraftInvoice + pk = django_filters.NumberFilter( + label=_('Invoice number'), + ) + payer_external_id = django_filters.CharFilter( + label=_('Payer (external ID)'), + field_name='payer', + ) + user_external_id = django_filters.CharFilter( + label=_('User (external ID)'), + method='filter_user_external_id', + ) + + def __init__(self, *args, **kwargs): + self.pool = kwargs.pop('pool') + super().__init__(*args, **kwargs) + + if self.pool.draft: + del self.filters['number'] + else: + del self.filters['pk'] + + def filter_user_external_id(self, queryset, name, value): + if not value: + return queryset + line_model = InvoiceLine + if self.pool.draft: + line_model = DraftInvoiceLine + lines = line_model.objects.filter(user_external_id=value).values('invoice') + return queryset.filter(pk__in=lines) + + +class DraftInvoiceFilterSet(AbstractInvoiceFilterSet): + class Meta: + model = DraftInvoice + fields = [] + + +class InvoiceFilterSet(AbstractInvoiceFilterSet): + class Meta: + model = Invoice + fields = [] + + class AbstractLineFilterSet(django_filters.FilterSet): regie = django_filters.ModelChoiceFilter( label=_('Regie'), queryset=regie_queryset, field_name='invoice__regie', ) + # for InvoiceLine invoice_number = django_filters.CharFilter( label=_('Invoice number'), field_name='invoice__formatted_number', lookup_expr='contains', ) + # for DraftInvoiceLine invoice_id = django_filters.NumberFilter( label=_('Invoice number'), ) diff --git a/lingo/invoicing/templates/lingo/invoicing/manager_invoice_lines.html b/lingo/invoicing/templates/lingo/invoicing/manager_invoice_lines.html index 14550cd..29f8ad6 100644 --- a/lingo/invoicing/templates/lingo/invoicing/manager_invoice_lines.html +++ b/lingo/invoicing/templates/lingo/invoicing/manager_invoice_lines.html @@ -1,7 +1,8 @@ +{% url 'lingo-manager-invoicing-pool-journal' pk=object.pk pool_pk=pool.pk as journal_url %} {% for line in object_list %}
  • #{{ line.pk }} - {{ line.user_name }} + {{ line.user_name }} ({{ line.user_external_id }}) - {{ line.event_date|date:"d/m/Y" }} - {{ line.label }} ({{ line.total_amount }})
  • {% endfor %} diff --git a/lingo/invoicing/templates/lingo/invoicing/manager_pool_detail.html b/lingo/invoicing/templates/lingo/invoicing/manager_pool_detail.html index 5a2b743..e0af55e 100644 --- a/lingo/invoicing/templates/lingo/invoicing/manager_pool_detail.html +++ b/lingo/invoicing/templates/lingo/invoicing/manager_pool_detail.html @@ -25,7 +25,27 @@ {% endblock %} {% block content %} - {% url 'lingo-manager-invoicing-pool-journal' pk=object.pk pool_pk=pool.pk as journal_url %} +
    +
    +
    +
    + {% trans "Invoice Filtering" %} +
    + {{ filterset.form.as_p }} +
    +
    + +
    +
    +
    + {% url 'lingo-manager-invoicing-pool-journal' pk=object.pk pool_pk=pool.pk as journal_url %}