9449: LivingProxyDB leaves data in families when "[Living]" chosen

This commit is contained in:
Paul Franklin 2016-05-27 09:32:23 -07:00
parent 51d21522ce
commit e3f002179f
2 changed files with 33 additions and 10 deletions

View File

@ -4,7 +4,7 @@
# #
# Copyright (C) 2008-2011 Reinhard Müller # Copyright (C) 2008-2011 Reinhard Müller
# Copyright (C) 2010 Jakim Friant # Copyright (C) 2010 Jakim Friant
# Copyright (C) 2013-2015 Paul Franklin # Copyright (C) 2013-2016 Paul Franklin
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -39,6 +39,7 @@ from gramps.gen.lib import (ChildRefType, Date, Span, Name, StyledText,
StyledTextTag, StyledTextTagType) StyledTextTag, StyledTextTagType)
from gramps.gen.display.name import displayer as name_displayer from gramps.gen.display.name import displayer as name_displayer
from gramps.gen.utils.alive import probably_alive from gramps.gen.utils.alive import probably_alive
from gramps.gen.proxy import LivingProxyDb
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -93,15 +94,24 @@ def _find_death_date(db, person):
return None return None
def find_records(db, filter, top_size, callname, def find_records(db, filter, top_size, callname,
trans_text=glocale.translation.sgettext, name_format=None): trans_text=glocale.translation.sgettext, name_format=None,
living_mode=LivingProxyDb.MODE_INCLUDE_ALL):
""" """
@param trans_text: allow deferred translation of strings @param trans_text: allow deferred translation of strings
@type trans_text: a GrampsLocale sgettext instance @type trans_text: a GrampsLocale sgettext instance
trans_text is a defined keyword (see po/update_po.py, po/genpot.sh) trans_text is a defined keyword (see po/update_po.py, po/genpot.sh)
:param name_format: optional format to control display of person's name :param name_format: optional format to control display of person's name
:type name_format: None or int :type name_format: None or int
:param living_mode: enable optional control of living people's records
:type living_mode: int
""" """
def get_unfiltered_person_from_handle(person_handle):
if living_mode == LivingProxyDb.MODE_INCLUDE_ALL:
return db.get_person_from_handle(person_handle)
else: # we are in the proxy so get the person before proxy changes
return db.get_unfiltered_person(person_handle)
today = datetime.date.today() today = datetime.date.today()
today_date = Date(today.year, today.month, today.day) today_date = Date(today.year, today.month, today.day)
@ -126,6 +136,7 @@ def find_records(db, filter, top_size, callname,
for person_handle in person_handle_list: for person_handle in person_handle_list:
person = db.get_person_from_handle(person_handle) person = db.get_person_from_handle(person_handle)
unfil_person = get_unfiltered_person_from_handle(person_handle)
if person is None: if person is None:
continue continue
@ -150,7 +161,7 @@ def find_records(db, filter, top_size, callname,
name_format=name_format) name_format=name_format)
if death_date is None: if death_date is None:
if probably_alive(person, db): if probably_alive(unfil_person, db):
# Still living, look for age records # Still living, look for age records
_record(person_youngestliving, person_oldestliving, _record(person_youngestliving, person_oldestliving,
today_date - birth_date, name, 'Person', person_handle, today_date - birth_date, name, 'Person', person_handle,
@ -231,6 +242,9 @@ def find_records(db, filter, top_size, callname,
for family in db.iter_families(): for family in db.iter_families():
#family = db.get_family_from_handle(family_handle) #family = db.get_family_from_handle(family_handle)
if living_mode != LivingProxyDb.MODE_INCLUDE_ALL:
# FIXME no iter_families method in LivingProxyDb so do it this way
family = db.get_family_from_handle(family.get_handle())
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
if not father_handle: if not father_handle:
@ -245,9 +259,11 @@ def find_records(db, filter, top_size, callname,
continue continue
father = db.get_person_from_handle(father_handle) father = db.get_person_from_handle(father_handle)
unfil_father = get_unfiltered_person_from_handle(father_handle)
if father is None: if father is None:
continue continue
mother = db.get_person_from_handle(mother_handle) mother = db.get_person_from_handle(mother_handle)
unfil_mother = get_unfiltered_person_from_handle(mother_handle)
if mother is None: if mother is None:
continue continue
@ -259,9 +275,12 @@ def find_records(db, filter, top_size, callname,
trans_text=trans_text, trans_text=trans_text,
name_format=name_format)} name_format=name_format)}
_record(None, family_mostchildren, if (living_mode == LivingProxyDb.MODE_INCLUDE_ALL
len(family.get_child_ref_list()), or (not probably_alive(unfil_father, db) and
name, 'Family', family.handle, top_size) not probably_alive(unfil_mother, db))):
_record(None, family_mostchildren,
len(family.get_child_ref_list()),
name, 'Family', family.handle, top_size)
father_birth_ref = father.get_birth_ref() father_birth_ref = father.get_birth_ref()
if father_birth_ref: if father_birth_ref:
@ -311,11 +330,13 @@ def find_records(db, filter, top_size, callname,
# Divorced but date unknown or inexact # Divorced but date unknown or inexact
continue continue
if not probably_alive(father, db) and not _good_date(father_death_date): if (not probably_alive(unfil_father, db)
and not _good_date(father_death_date)):
# Father died but death date unknown or inexact # Father died but death date unknown or inexact
continue continue
if not probably_alive(mother, db) and not _good_date(mother_death_date): if (not probably_alive(unfil_mother, db)
and not _good_date(mother_death_date)):
# Mother died but death date unknown or inexact # Mother died but death date unknown or inexact
continue continue
@ -323,7 +344,8 @@ def find_records(db, filter, top_size, callname,
and father_death_date is None and father_death_date is None
and mother_death_date is None): and mother_death_date is None):
# Still married and alive # Still married and alive
if probably_alive(father, db) and probably_alive(mother, db): if (probably_alive(unfil_father, db)
and probably_alive(unfil_mother, db)):
_record(family_youngestmarried, family_oldestmarried, _record(family_youngestmarried, family_oldestmarried,
today_date - marriage_date, today_date - marriage_date,
name, 'Family', family.handle, top_size) name, 'Family', family.handle, top_size)

View File

@ -108,7 +108,8 @@ class RecordsReport(Report):
records = find_records(self.database, self.filter, records = find_records(self.database, self.filter,
self.top_size, self.callname, self.top_size, self.callname,
trans_text=self._, name_format=self._nf) trans_text=self._, name_format=self._nf,
living_mode=self._lv)
self.doc.start_paragraph('REC-Title') self.doc.start_paragraph('REC-Title')
title = self._("Records") title = self._("Records")