# -*- encoding: utf-8 -*-
import datetime
+from ordereddict import OrderedDict
from django import forms
from django.core.urlresolvers import reverse
from django.forms.models import BaseInlineFormSet
else:
return devise
+ def has_changed(self):
+ """
+ Modification de has_changed pour qu'il ignore les montant a 0
+ et les 'types'.
+ """
+
+ changed_data = self.changed_data
+
+ # Type is set in hidden fields, it shouldn't be changed by the
+ # user; ignore when checking if data has changed.
+ if 'type' in changed_data:
+ changed_data.pop(changed_data.index('type'))
+
+ # Montant is set to 0 in javascript, ifnore 'montant' data if
+ # its value is 0.
+
+ # Generer le key tel qu'identifié dans self.data:
+ montant_key = '-'.join((self.prefix, 'montant'))
+
+ if ('montant' in changed_data and
+ self.data.get(montant_key, '0') == '0'):
+ changed_data.pop(changed_data.index('montant'))
+
+ return bool(changed_data)
+
class GroupedInlineFormset(BaseInlineFormSet):
- def set_groups(self, group_accessor):
+ def set_groups(self, group_accessor, group_order=[]):
"""
group_accessor: A function that will get the key and name from
each form.
+ group_order: list the group keys here in a list and
+ GroupedInlineFormset.groups will be ordered (ordereddict) by
+ the key sequence provided here. Any missing key from the
+ sequence will
"""
# Build group list.
- self.groups = {}
+ self.groups = OrderedDict()
+ temp_groups = {}
# self.groups_and_forms = []
for form in self.forms:
group_key, group_name = group_accessor(form)
- if not self.groups.has_key(group_key):
- self.groups[group_key] = {
+ if not temp_groups.has_key(group_key):
+ temp_groups[group_key] = {
'name': group_name,
+ 'key': group_key,
'forms': [],
}
- self.groups[group_key]['forms'].append(form)
+ temp_groups[group_key]['forms'].append(form)
+
+ for order_key in group_order:
+ if temp_groups.has_key(order_key):
+ self.groups[order_key] = temp_groups.pop(order_key)
+
+ for key in temp_groups:
+ self.groups[key] = temp_groups[key]
+
+ del temp_groups
+
self.group_list = self.groups.values()
can_order=False,
can_delete=True,
max_num=None,
- formfield_callback=None):
- """
- Returns an ``InlineFormSet`` for the given kwargs.
-
- You must provide ``fk_name`` if ``model`` has more than one ``ForeignKey``
- to ``parent_model``.
- """
+ formfield_callback=None,
+ group_order=None):
trs = rh.TypeRemuneration.objects.all()
extra = max_num = trs.count()
fk = _get_foreign_key(parent_model, model, fk_name=fk_name)
}
# Set form grouping.
- inst.set_groups(grouper)
+ inst.set_groups(grouper, group_order)
FormSet.__init__ = __init__
RemunForm = remun_formset_factory(
- dae.Dossier, dae.Remuneration, form=FlexibleRemunForm
+ dae.Dossier,
+ dae.Remuneration,
+ form=FlexibleRemunForm,
+ group_order = [
+ u'Traitement',
+ u'Indemnité',
+ u'Charges',
+ u'Accessoire',
+ ]
)