1# 2# Gramps - a GTK+/GNOME based genealogy program 3# 4# Copyright (C) 2002-2006 Donald N. Allingham 5# 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 2 of the License, or 9# (at your option) any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15# 16# You should have received a copy of the GNU General Public License 17# along with this program; if not, write to the Free Software 18# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19# 20 21#------------------------------------------------------------------------- 22# 23# Standard Python modules 24# 25#------------------------------------------------------------------------- 26from ....const import GRAMPS_LOCALE as glocale 27_ = glocale.translation.gettext 28 29#------------------------------------------------------------------------- 30# 31# Gramps modules 32# 33#------------------------------------------------------------------------- 34from ....datehandler import parser 35from ....display.place import displayer as place_displayer 36from ....lib.eventroletype import EventRoleType 37from ....lib.eventtype import EventType 38from .. import Rule 39 40#------------------------------------------------------------------------- 41# 42# HasDeath 43# 44#------------------------------------------------------------------------- 45class HasDeath(Rule): 46 """Rule that checks for a person with a death of a particular value""" 47 48 labels = [ _('Date:'), _('Place:'), _('Description:') ] 49 name = _('People with the <death data>') 50 description = _("Matches people with death data of a particular value") 51 category = _('Event filters') 52 allow_regex = True 53 54 def prepare(self, db, user): 55 if self.list[0]: 56 self.date = parser.parse(self.list[0]) 57 else: 58 self.date = None 59 60 def apply(self,db,person): 61 for event_ref in person.get_event_ref_list(): 62 if not event_ref: 63 continue 64 elif event_ref.role != EventRoleType.PRIMARY: 65 # Only match primaries, no witnesses 66 continue 67 event = db.get_event_from_handle(event_ref.ref) 68 if event.get_type() != EventType.DEATH: 69 # No match: wrong type 70 continue 71 if not self.match_substring(2, event.get_description()): 72 # No match: wrong description 73 continue 74 if self.date: 75 if not event.get_date_object().match(self.date): 76 # No match: wrong date 77 continue 78 if self.list[1]: 79 place_id = event.get_place_handle() 80 if place_id: 81 place = db.get_place_from_handle(place_id) 82 place_title = place_displayer.display(db, place) 83 if not self.match_substring(1, place_title): 84 # No match: wrong place 85 continue 86 else: 87 # No match: event has no place, but place specified 88 continue 89 # This event matched: exit positive 90 return True 91 # Nothing matched: exit negative 92 return False 93