def save(self, trans): """ Save the census details to the database. """ # Update people on the census all_people = [] for order, row in enumerate(self.model): all_people.append(row[0]) person = self.db.get_person_from_handle(row[0]) event_ref = self.get_census_event_ref(person) if event_ref is None: # Add new link to census event_ref = EventRef() event_ref.ref = self.event.get_handle() event_ref.set_role(EventRoleType.PRIMARY) person.add_event_ref(event_ref) # Write attributes attrs = event_ref.get_attribute_list() set_attribute(event_ref, attrs, ORDER_ATTR, str(order + 1)) for offset, name in enumerate(self.columns): value = row[offset + 1] if name == _('Name'): if value != name_displayer.display(person): set_attribute(event_ref, attrs, name, value) else: set_attribute(event_ref, attrs, name, value) self.db.commit_person(person, trans) # Remove links to people no longer on census for handle in (set(self.initial_people) - set(all_people)): person = self.db.get_person_from_handle(handle) ref_list = [event_ref for event_ref in person.get_event_ref_list() if event_ref.ref != self.event.handle] person.set_event_ref_list(ref_list) self.db.commit_person(person, trans)
def add_participant(self, *obj): person = Person() ref = EventRef() ref.ref = self.handle person.add_event_ref(ref) try: EditPerson(self.dbstate, self.uistate, [], person) except WindowActiveError: pass
def select_participant(self, *obj): SelectPerson = SelectorFactory('Person') dialog = SelectPerson(self.dbstate, self.uistate) person = dialog.run() if person is None: return ref = EventRef() ref.ref = self.handle person.add_event_ref(ref) try: EditPerson(self.dbstate, self.uistate, [], person) except WindowActiveError: pass
def get_event_ref(event, obj, role): """ Return the event reference for a given person or family that points to the event being edited. """ for event_ref in obj.get_event_ref_list(): if (event_ref.ref == event.get_handle() and event_ref.get_role() == role): return event_ref # Add new event reference event_ref = EventRef() event_ref.ref = event.get_handle() event_ref.set_role(role) obj.add_event_ref(event_ref) return event_ref
def __add_resi_event(self, person, placename, date_object): pn = PlaceName() pn.set_value(placename) place = Place() place.set_name(pn) placehandle = self.dbstate.db.add_place(place, self.trans) e = Event() e.set_type(EventType.RESIDENCE) e.set_date_object(date_object) e.set_place_handle(placehandle) e.set_description("marriage") eventhandle = self.dbstate.db.add_event(e, self.trans) eref = EventRef() eref.ref = eventhandle person.add_event_ref(eref) self.dbstate.db.commit_person(person, self.trans)