Skip to content

Commit 007667d

Browse files
committed
A new action class: ResidenceEvent
Adds a single residence and links to all people on the form. Residence place and date are copied from the form event place and date.
1 parent 3dbc678 commit 007667d

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Form/UK1841.py

+47
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@
2626
from gramps.gen.datehandler import displayer as date_displayer
2727
from gramps.gen.db import DbTxn
2828
from gramps.gen.display.name import displayer as name_displayer
29+
from gramps.gen.display.place import displayer as place_displayer
2930
from gramps.gen.lib import (Date, Event, EventType, EventRef, EventRoleType,
3031
Person)
32+
from gramps.gen.utils.db import get_participant_from_event
3133

3234
#------------------------------------------------------------------------
3335
#
@@ -117,3 +119,48 @@ def get_actions(self, dbstate, citation, form_event):
117119
actions.append((name_displayer.display(person), occupation,
118120
lambda dbstate, uistate, track, citation_handle = citation.handle, person_handle = person.handle, occupation_ = occupation: ActionBase.add_event_to_person(dbstate, uistate, track, person_handle, EventType.OCCUPATION, form_event.get_date_object(), occupation_, citation_handle, EventRoleType.PRIMARY)))
119121
return (_("Add Occupation event"), actions)
122+
123+
class ResidenceEvent(ActionBase):
124+
def __init__(self):
125+
ActionBase.__init__(self)
126+
pass
127+
128+
def get_actions(self, dbstate, citation, form_event):
129+
db = dbstate.db
130+
# build a list of all the people referenced in the form. For 1841, all people have a PRIMARY event role
131+
people = []
132+
for item in db.find_backlink_handles(form_event.get_handle(), include_classes=['Person']):
133+
handle = item[1]
134+
person = db.get_person_from_handle(handle)
135+
for event_ref in person.get_event_ref_list():
136+
if event_ref.ref == form_event.get_handle():
137+
people.append((person.get_handle(), EventRoleType.PRIMARY))
138+
actions = []
139+
if people:
140+
place = None
141+
if form_event.get_place_handle():
142+
place = place_displayer.display(db, db.get_place_from_handle(form_event.get_place_handle()))
143+
actions.append((get_participant_from_event(db, form_event.get_handle()), place,
144+
lambda dbstate, uistate, track, citation_handle = citation.handle, people_handles = people: ResidenceEvent.command(dbstate, uistate, track, citation_handle, form_event.get_date_object(), form_event.get_place_handle(), people_handles)))
145+
return (_("Add Residence event"), actions)
146+
147+
def command(dbstate, uistate, track, citation_handle, event_date_object, event_place_handle, people_handles):
148+
db = dbstate.db
149+
# create the RESIDENCE event
150+
event = Event()
151+
event.set_type(EventType.RESIDENCE)
152+
event.set_date_object(event_date_object)
153+
event.set_place_handle(event_place_handle)
154+
event.add_citation(citation_handle)
155+
with DbTxn(_("Add Event (%s)") % event.get_gramps_id(), db) as trans:
156+
db.add_event(event, trans)
157+
158+
# and reference the event from all people
159+
event_ref = EventRef()
160+
event_ref.ref = event.get_handle()
161+
for (person_handle, role) in people_handles:
162+
event_ref.set_role(role)
163+
person = db.get_person_from_handle(person_handle)
164+
person.add_event_ref(event_ref)
165+
with DbTxn(_("Add Event (%s)") % name_displayer.display(person), db) as trans:
166+
db.commit_person(person, trans)

0 commit comments

Comments
 (0)