diff --git a/lingo/pricing/forms.py b/lingo/pricing/forms.py index fba7ebb..d8a7061 100644 --- a/lingo/pricing/forms.py +++ b/lingo/pricing/forms.py @@ -187,6 +187,41 @@ class AgendaPricingForm(NewAgendaPricingForm): ) return subscription_required + def clean(self): + cleaned_data = super().clean() + if ( + 'date_start' in cleaned_data + and 'date_end' in cleaned_data + and 'flat_fee_schedule' in cleaned_data + ): + old_date_start = self.instance.date_start + old_date_end = self.instance.date_end + old_flat_fee_schedule = self.instance.flat_fee_schedule + new_date_start = cleaned_data['date_start'] + new_date_end = cleaned_data['date_end'] + new_flat_fee_schedule = cleaned_data['flat_fee_schedule'] + if ( + old_date_start != new_date_start + or old_date_end != new_date_end + or old_flat_fee_schedule != new_flat_fee_schedule + ): + overlapping_qs = ( + AgendaPricing.objects.filter(flat_fee_schedule=new_flat_fee_schedule) + .exclude(pk=self.instance.pk) + .extra( + where=["(date_start, date_end) OVERLAPS (%s, %s)"], + params=[new_date_start, new_date_end], + ) + ) + for agenda in self.instance.agendas.all(): + if overlapping_qs.filter(agendas=agenda).exists(): + self.add_error( + None, + _('Agenda "%s" has already a pricing overlapping this period.') % agenda.label, + ) + + return cleaned_data + class AgendaPricingAgendaAddForm(forms.Form): agenda = forms.ModelChoiceField(label=_('Agenda to add'), queryset=Agenda.objects.none(), required=True) @@ -198,7 +233,9 @@ class AgendaPricingAgendaAddForm(forms.Form): def clean_agenda(self): agenda = self.cleaned_data['agenda'] - overlapping_qs = AgendaPricing.objects.filter(agendas=agenda).extra( + overlapping_qs = AgendaPricing.objects.filter( + flat_fee_schedule=self.agenda_pricing.flat_fee_schedule, agendas=agenda + ).extra( where=["(date_start, date_end) OVERLAPS (%s, %s)"], params=[self.agenda_pricing.date_start, self.agenda_pricing.date_end], ) diff --git a/lingo/pricing/templates/lingo/pricing/manager_agenda_detail.html b/lingo/pricing/templates/lingo/pricing/manager_agenda_detail.html index 662fb4c..af08741 100644 --- a/lingo/pricing/templates/lingo/pricing/manager_agenda_detail.html +++ b/lingo/pricing/templates/lingo/pricing/manager_agenda_detail.html @@ -26,6 +26,7 @@
+

{% trans "Pricings" context 'agenda pricing' %}

{% if agenda_pricings %}
{% endif %} +

{% trans "Flat fee schedule pricings" %}

+ {% if agenda_pricings_flat %} + + {% else %} +
+ {% blocktrans %} + This agenda doesn't have any flat fee schedule pricing defined yet. + {% endblocktrans %} +
+ {% endif %}