diff --git a/lingo/pricing/forms.py b/lingo/pricing/forms.py index d8a7061..881c24f 100644 --- a/lingo/pricing/forms.py +++ b/lingo/pricing/forms.py @@ -25,7 +25,7 @@ from django.utils.translation import ugettext_lazy as _ from lingo.agendas.chrono import ChronoError, get_event, get_subscriptions from lingo.agendas.models import Agenda, CheckType -from lingo.pricing.models import AgendaPricing, Criteria, CriteriaCategory, PricingError +from lingo.pricing.models import AgendaPricing, BillingDate, Criteria, CriteriaCategory, PricingError class ExportForm(forms.Form): @@ -219,6 +219,25 @@ class AgendaPricingForm(NewAgendaPricingForm): None, _('Agenda "%s" has already a pricing overlapping this period.') % agenda.label, ) + if ( + old_flat_fee_schedule != new_flat_fee_schedule + and new_flat_fee_schedule is False + and self.instance.billingdates.exists() + ): + self.add_error( + 'flat_fee_schedule', + _('Some billing dates are are defined for this pricing; please delete them first.'), + ) + if ( + old_flat_fee_schedule == new_flat_fee_schedule + and new_flat_fee_schedule is True + and (old_date_start != new_date_start or old_date_end != new_date_end) + ): + if ( + self.instance.billingdates.filter(date_start__lt=new_date_start).exists() + or self.instance.billingdates.filter(date_start__gte=new_date_end).exists() + ): + self.add_error(None, _('Some billing dates are outside the pricing period.')) return cleaned_data @@ -244,6 +263,24 @@ class AgendaPricingAgendaAddForm(forms.Form): return agenda +class AgendaPricingBillingDateForm(forms.ModelForm): + class Meta: + model = BillingDate + fields = ['date_start', 'label'] + widgets = { + 'date_start': forms.DateInput(attrs={'type': 'date'}, format='%Y-%m-%d'), + } + + def clean_date_start(self): + date_start = self.cleaned_data['date_start'] + if ( + date_start < self.instance.agenda_pricing.date_start + or date_start >= self.instance.agenda_pricing.date_end + ): + raise forms.ValidationError(_('The billing start date must be within the period of the pricing.')) + return date_start + + class PricingMatrixForm(forms.Form): def __init__(self, *args, **kwargs): matrix = kwargs.pop('matrix') diff --git a/lingo/pricing/templates/lingo/pricing/manager_agenda_pricing_billing_date_form.html b/lingo/pricing/templates/lingo/pricing/manager_agenda_pricing_billing_date_form.html new file mode 100644 index 0000000..4fb6f60 --- /dev/null +++ b/lingo/pricing/templates/lingo/pricing/manager_agenda_pricing_billing_date_form.html @@ -0,0 +1,30 @@ +{% extends "lingo/pricing/manager_agenda_pricing_detail.html" %} +{% load i18n %} + +{% block breadcrumb %} +{{ block.super }} +{% if form.instance.pk %} +{{ form.instance }} +{% else %} +{% trans "New billing date" %} +{% endif %} +{% endblock %} + +{% block appbar %} +{% if form.instance.pk %} +

{{ form.instance.agenda_pricing }} - {% trans "Edit billing date" %}

+{% else %} +

{{ form.instance.agenda_pricing }} - {% trans "New billing date" %}

+{% endif %} +{% endblock %} + +{% block content %} +
+ {% csrf_token %} + {{ form.as_p }} +
+ + {% trans 'Cancel' %} +
+
+{% endblock %} diff --git a/lingo/pricing/templates/lingo/pricing/manager_agenda_pricing_detail.html b/lingo/pricing/templates/lingo/pricing/manager_agenda_pricing_detail.html index 35bed3d..1feff4b 100644 --- a/lingo/pricing/templates/lingo/pricing/manager_agenda_pricing_detail.html +++ b/lingo/pricing/templates/lingo/pricing/manager_agenda_pricing_detail.html @@ -31,6 +31,9 @@ {% endif %} + {% if object.flat_fee_schedule %} + + {% endif %} {% for matrix in iter_matrix %} {% empty %} @@ -119,10 +122,36 @@
{{ pricing_data|pprint }}
- {% endwith %} - {% endif %} + {% endwith %} + {% endif %} + {% if object.flat_fee_schedule %} + + {% endif %} + {% for matrix in iter_matrix %}