|
26 | 26 | from gramps.gen.datehandler import displayer as date_displayer
|
27 | 27 | from gramps.gen.db import DbTxn
|
28 | 28 | from gramps.gen.display.name import displayer as name_displayer
|
| 29 | +from gramps.gen.display.place import displayer as place_displayer |
29 | 30 | from gramps.gen.lib import (Date, Event, EventType, EventRef, EventRoleType,
|
30 | 31 | Person)
|
| 32 | +from gramps.gen.utils.db import get_participant_from_event |
31 | 33 |
|
32 | 34 | #------------------------------------------------------------------------
|
33 | 35 | #
|
@@ -117,3 +119,48 @@ def get_actions(self, dbstate, citation, form_event):
|
117 | 119 | actions.append((name_displayer.display(person), occupation,
|
118 | 120 | 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)))
|
119 | 121 | 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