Source code for org.forms.payments_search_form
from __future__ import annotations
from onegov.form.core import Form
from onegov.form.fields import SelectField, TimezoneDateTimeField
from onegov.form.validators import StrictOptional
from onegov.org import _
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from onegov.pay import PaymentCollection
[docs]
class PaymentSearchForm(Form):
[docs]
STATUS_CHOICES = [
('', _('All')),
('open', _('Open')),
('paid', _('Paid')),
('invoiced', _('Invoiced'))
]
[docs]
PAYMENT_TYPE_CHOICES = [
('', _('All')),
('manual', _('Manual')),
('provider', _('Payment Provider'))
]
[docs]
reservation_start_date = TimezoneDateTimeField(
label=_('From reservation date'),
timezone=tz,
fieldset=_('Filter Payments'),
validators=[StrictOptional()]
)
[docs]
reservation_end_date = TimezoneDateTimeField(
label=_('To reservation date'),
timezone=tz,
fieldset=_('Filter Payments'),
validators=[StrictOptional()]
)
[docs]
ticket_start_date = TimezoneDateTimeField(
label=_('Ticket created from date'),
timezone=tz,
fieldset=_('Filter by Ticket Date'),
description=_('Filters payments by the creation date of their '
'associated ticket.'),
validators=[StrictOptional()]
)
[docs]
ticket_end_date = TimezoneDateTimeField(
label=_('Ticket created to date'),
timezone=tz,
fieldset=_('Filter by Ticket Date'),
description=_('Filters payments by the creation date of their '
'associated ticket.'),
validators=[StrictOptional()]
)
[docs]
status = SelectField(
label=_('Status'),
fieldset=_('Filter Payments'),
choices=[], # To be populated in on_request
default='',
)
[docs]
payment_type = SelectField(
label=_('Payment Type'),
fieldset=_('Filter Payments'),
choices=[], # To be populated in on_request
default='',
)
[docs]
def apply_model(self, model: PaymentCollection) -> None:
"""Populate the form fields from the model's filter values."""
self.reservation_start_date.data = model.reservation_start
self.reservation_end_date.data = model.reservation_end
self.status.data = model.status or ''
self.ticket_start_date.data = model.ticket_start
self.ticket_end_date.data = model.ticket_end
self.payment_type.data = model.payment_type or ''
[docs]
def update_model(self, model: PaymentCollection) -> None:
"""Update the model's filter values from the form's data."""
model.reservation_start = self.reservation_start_date.data
model.reservation_end = self.reservation_end_date.data
model.status = self.status.data or None
model.ticket_start = self.ticket_start_date.data
model.ticket_end = self.ticket_end_date.data
model.payment_type = self.payment_type.data or None
# Reset to the first page when filters change
model.page = 0
[docs]
def on_request(self) -> None:
# Translate choices on request
self.status.choices = [
(value, self.request.translate(label))
for value, label in self.STATUS_CHOICES
]
self.payment_type.choices = [
(value, self.request.translate(label))
for value, label in self.PAYMENT_TYPE_CHOICES
]
self.css_class = 'resettable'