nanterre: approximate birthdate only for duplicate search (fixes #22980)

This commit is contained in:
Benjamin Dauvergne 2018-04-04 16:47:06 +02:00
parent f990159355
commit daa50d348a
1 changed files with 16 additions and 8 deletions

View File

@ -225,7 +225,10 @@ class PersonSearch(object):
for identifier in identifiers:
self = self.search_identifier(identifier)
for birthdate in birthdates:
self = self.search_birthdate(birthdate)
if email or identifier or names:
self = self.search_birthdate(birthdate, window_days=0)
else:
self = self.search_birthdate(birthdate)
self = self.search_names(names)
return self
@ -258,7 +261,7 @@ class PersonSearch(object):
self.add_filter('key', q)
return self
def search_birthdate(self, birthdate, window_days=0):
def search_birthdate(self, birthdate, window_days=None):
self = copy.deepcopy(self)
if hasattr(birthdate, 'year'):
@ -291,7 +294,7 @@ class PersonSearch(object):
before = datetime.date(int(birthdate['year']), 12, 31)
first_january_same_year = None
if before == after:
if before == after and window_days is not None:
first_january_same_year = before.replace(month=1, day=1)
if window_days:
after -= datetime.timedelta(days=window_days)
@ -299,11 +302,16 @@ class PersonSearch(object):
query = Q(content__date_de_naissance__timestamp__gte=after)
query &= Q(content__date_de_naissance__timestamp__lte=before)
# always look for entities before 1903-01-01
query |= Q(content__date_de_naissance__timestamp__lte=datetime.date(1903, 1, 1))
# if search is exact look for first january of the same year
if first_january_same_year:
query |= Q(content__date_de_naissance__timestamp=first_january_same_year)
# windows days is only used by the duplicate search and when the
# birthdate is not the only query, we use this fact to augment the
# search window with dates before 1903 and dates on the first day of
# the same year, to match dubious imports.
if window_days is not None:
# always look for entities before 1903-01-01
query |= Q(content__date_de_naissance__timestamp__lte=datetime.date(1903, 1, 1))
# if search is exact look for first january of the same year
if first_january_same_year:
query |= Q(content__date_de_naissance__timestamp=first_january_same_year)
self.add_filter('birthdate', query)
return self