nanterre: changement des règles de suppression sur inactivité (fixes #28080)

* supprime tous les enfants inactifs depuis 12 mois et sans fédérations,
* supprime tous les parents inactifs depuis 6 mois, sans fédération, sans enfants ou dont les enfants sont à supprimer.
This commit is contained in:
Benjamin Dauvergne 2018-11-30 15:31:51 +01:00
parent 9daf983e8b
commit 3100eb40e8
3 changed files with 6 additions and 31 deletions

View File

@ -85,24 +85,7 @@ class Inactivity(object):
@cached_property
def deletable_children(self):
deletable_adults = self.exclude_newer_than_threshold(self.filter_no_federation(self.adults),
self.adult_threshold)
non_deletable_adults = self.adults.exclude(id__in=deletable_adults.values_list('id', flat=True))
potent = self.exclude_newer_than_threshold(self.filter_no_federation(self.children), self.child_threshold)
potent = potent.exclude(right_relations__left__in=non_deletable_adults)
potent_ids = potent.values_list('id', flat=True)
def filter_siblings_are_potent():
for child in potent:
for sibling in utils.fratrie(child):
if sibling.id not in potent_ids:
break
else:
yield child.id
potent2_ids = list(filter_siblings_are_potent())
return potent.filter(id__in=potent2_ids)
return self.exclude_newer_than_threshold(self.filter_no_federation(self.children), self.child_threshold)
@cached_property
def deletable_adults(self):
@ -116,13 +99,5 @@ class Inactivity(object):
break
else:
yield adult
potent2 = list(filter_children_are_deletable())
potent2_ids = [adult.id for adult in potent2]
def filter_spouse_is_deletable():
for adult in potent2:
conjoint = utils.conjoint(adult)[0]
if conjoint and conjoint.id not in potent2_ids:
continue
yield adult.id
return potent.filter(id__in=filter_spouse_is_deletable())
potent2_ids = [adult.id for adult in filter_children_are_deletable()]
return potent.filter(id__in=potent2_ids)

View File

@ -31,7 +31,7 @@
<li>Une fiche sans activité est une fiche dont la dernière date de modification et les dernières lignes du journal n'ont pas bougé depuis un certain nombre de jours</li>
<li>Les fiches enfants sans activité depuis {{ child_delay }} jours sont considérées inactives.</li>
<li>Les fiches adultes sans activité depuis {{ adult_delay }} jours sont considérées inactives.</li>
<li>Les enfants dont les parents sont inactifs et sans fédérations et dont tous les enfants de la même fratrie (tous les enfants partageant au moins un parent commun) sont inactifs et sans fédération sont à supprimer.</li>
<li>Les enfants inactifs et sans fédérations sont à supprimer.</li>
<li>Les adultes sans liens matrimoniaux, inactifs, sans fédérations et dont tous les enfants sont à supprimer sont à supprimer.</li>
<li>Les couples inactifs, sans fédérations et dont tous les enfants sont à supprimer sont à supprimer.</li>
</ul>

View File

@ -209,8 +209,8 @@ def synchronize_federations_delete(request, job_id, model_admin, *args, **kwargs
def fiches_inactives():
inactivity = Inactivity(
child_delay=getattr(settings, 'ZOO_NANTERRE_INACTIVITY_CHILD_DELAY', 365),
adult_delay=getattr(settings, 'ZOO_NANTERRE_INACTIVITY_ADULT_DELAY', 365),
child_delay=getattr(settings, 'ZOO_NANTERRE_INACTIVITY_CHILD_DELAY', 365), # default 12 months
adult_delay=getattr(settings, 'ZOO_NANTERRE_INACTIVITY_ADULT_DELAY', 182), # default 6 months
)
fiches = []
for child in itertools.chain(inactivity.deletable_children, inactivity.deletable_adults):