From 3b15d81e4352ee15ad1fc27603b538d5b9a65988 Mon Sep 17 00:00:00 2001 From: Paul Franklin Date: Sun, 11 May 2014 10:35:50 -0700 Subject: [PATCH] 5690: Can create multiple events with same Gramps-ID --- gramps/gui/editors/editeventref.py | 7 +++-- gramps/gui/editors/editmediaref.py | 4 +++ gramps/gui/editors/editreference.py | 44 +++++++++++++++++++++++++++++ gramps/gui/editors/editreporef.py | 7 +++-- po/POTFILES.in | 1 + po/POTFILES.skip | 1 - 6 files changed, 59 insertions(+), 5 deletions(-) diff --git a/gramps/gui/editors/editeventref.py b/gramps/gui/editors/editeventref.py index 11df4280b..18c89cafe 100644 --- a/gramps/gui/editors/editeventref.py +++ b/gramps/gui/editors/editeventref.py @@ -26,14 +26,14 @@ # Python modules # #------------------------------------------------------------------------- -from gramps.gen.const import GRAMPS_LOCALE as glocale -_ = glocale.translation.gettext #------------------------------------------------------------------------- # # gramps modules # #------------------------------------------------------------------------- +from gramps.gen.const import GRAMPS_LOCALE as glocale +_ = glocale.translation.gettext from gramps.gen.lib import EventType, NoteType from gramps.gen.db import DbTxn from ..glade import Glade @@ -243,6 +243,9 @@ class EditEventRef(EditReference): def ok_clicked(self, obj): + if self.check_for_duplicate_id('Event'): + return + if self.source.handle: with DbTxn(_("Modify Event"), self.db) as trans: self.commit_event(self.source,trans) diff --git a/gramps/gui/editors/editmediaref.py b/gramps/gui/editors/editmediaref.py index 11f9dd01d..1ac75df35 100644 --- a/gramps/gui/editors/editmediaref.py +++ b/gramps/gui/editors/editmediaref.py @@ -499,6 +499,10 @@ class EditMediaRef(EditReference): self._setup_notebook_tabs(notebook_ref) def save(self,*obj): + + if self.check_for_duplicate_id('Media'): + return + #first save primary object if self.source.handle: with DbTxn(_("Edit Media Object (%s)") % diff --git a/gramps/gui/editors/editreference.py b/gramps/gui/editors/editreference.py index 932f0116c..70998a5ae 100644 --- a/gramps/gui/editors/editreference.py +++ b/gramps/gui/editors/editreference.py @@ -3,6 +3,7 @@ # # Copyright (C) 2000-2006 Donald N. Allingham # 2009 Gary Burton +# Copyright (C) 2014 Paul Franklin # # 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 @@ -31,6 +32,9 @@ from gi.repository import Gtk # gramps modules # #------------------------------------------------------------------------- +from gramps.gen.const import GRAMPS_LOCALE as glocale +_ = glocale.translation.gettext +from ..dialog import ErrorDialog from ..managedwindow import ManagedWindow from .displaytabs import GrampsTab from gramps.gen.config import config @@ -253,3 +257,43 @@ class EditReference(ManagedWindow, DbGUIElement): of the main interface, not of the displaytabs. """ pass + + def check_for_duplicate_id(self, type): + """ + check to see if the gramps ID (if any) already exists + + type : the gramps primary object type, a string + returns : True if the gramps ID already exists, else False + + N.B. the various strings, string variables, and titles existed already + """ + new_id = self.source.get_gramps_id() + if new_id: + old_primary = self.db.get_from_name_and_gramps_id(type, new_id) + if old_primary: + if type == 'Event': + msg1 = _("Cannot save event. ID already exists.") + description = old_primary.get_description() + elif type == 'Media': + msg1 = _("Cannot save media object. ID already exists.") + description = old_primary.get_description() + elif type == 'Repository': + msg1 = _("Cannot save repository. ID already exists.") + description = old_primary.get_name() + if description: + msg2 = _("You have attempted to use the existing Gramps " + "ID with value %(id)s. This value is already " + "used by '%(prim_object)s'. Please enter a " + "different ID or leave blank to get the next " + "available ID value.") % { + 'id' : new_id, 'prim_object' : description } + else: + msg2 = _("You have attempted to use the existing Gramps " + "ID with value %(id)s. This value is already " + "used. Please enter a " + "different ID or leave blank to get the next " + "available ID value.") % { + 'id' : new_id} + ErrorDialog(msg1, msg2) + return True + return False diff --git a/gramps/gui/editors/editreporef.py b/gramps/gui/editors/editreporef.py index 1c0732fdf..85f5df19a 100644 --- a/gramps/gui/editors/editreporef.py +++ b/gramps/gui/editors/editreporef.py @@ -24,14 +24,14 @@ # Python modules # #------------------------------------------------------------------------- -from gramps.gen.const import GRAMPS_LOCALE as glocale -_ = glocale.translation.gettext #------------------------------------------------------------------------- # # gramps modules # #------------------------------------------------------------------------- +from gramps.gen.const import GRAMPS_LOCALE as glocale +_ = glocale.translation.gettext from gramps.gen.lib import NoteType from gramps.gen.db import DbTxn @@ -189,6 +189,9 @@ class EditRepoRef(EditReference): def ok_clicked(self, obj): + if self.check_for_duplicate_id('Repository'): + return + if self.source.handle: with DbTxn(_("Modify Repository"), self.db) as trans: self.db.commit_repository(self.source,trans) diff --git a/po/POTFILES.in b/po/POTFILES.in index 4da1b2d43..ea8a9668c 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -389,6 +389,7 @@ gramps/gui/editors/editplace.py gramps/gui/editors/editplacename.py gramps/gui/editors/editplaceref.py gramps/gui/editors/editprimary.py +gramps/gui/editors/editreference.py gramps/gui/editors/editreporef.py gramps/gui/editors/editrepository.py gramps/gui/editors/editsource.py diff --git a/po/POTFILES.skip b/po/POTFILES.skip index a0cdfed41..7c1e35e76 100644 --- a/po/POTFILES.skip +++ b/po/POTFILES.skip @@ -279,7 +279,6 @@ gramps/gui/glade/catalog/grampswidgets.py # gui/editors - the GUI editors package # gramps/gui/editors/__init__.py -gramps/gui/editors/editreference.py gramps/gui/editors/editsecondary.py # # gui/editors/displaytabs - the GUI display tabs package