diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-01-03 17:26:41 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-01-03 17:26:41 +0100 |
commit | 54f1404aadea27ecbae51978bfbd673b9e40d25d (patch) | |
tree | 0ff4927ac85605a24df691361e8306175abfbefb | |
parent | 842ce120106ccb604e160102c63eb1326f899fb3 (diff) | |
download | Ishtar-54f1404aadea27ecbae51978bfbd673b9e40d25d.tar.bz2 Ishtar-54f1404aadea27ecbae51978bfbd673b9e40d25d.zip |
Extra actions: regenerate external_id
-rw-r--r-- | archaeological_context_records/admin.py | 2 | ||||
-rw-r--r-- | archaeological_context_records/templates/ishtar/sheet_contextrecord.html | 2 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 13 | ||||
-rw-r--r-- | ishtar_common/models.py | 34 | ||||
-rw-r--r-- | ishtar_common/urls.py | 4 | ||||
-rw-r--r-- | ishtar_common/utils.py | 8 | ||||
-rw-r--r-- | ishtar_common/views.py | 20 |
7 files changed, 72 insertions, 11 deletions
diff --git a/archaeological_context_records/admin.py b/archaeological_context_records/admin.py index 434e9c089..3c980d550 100644 --- a/archaeological_context_records/admin.py +++ b/archaeological_context_records/admin.py @@ -52,7 +52,7 @@ class AdminContextRecordForm(forms.ModelForm): multi_polygon = MultiPolygonField(label=_(u"Multi polygon"), required=False, widget=OSMWidget) operation = AutoCompleteSelectField('operation') - parcel = AutoCompleteSelectField('parcel') + parcel = AutoCompleteSelectField('parcel', required=False) town = AutoCompleteSelectField('town', required=False) archaeological_site = AutoCompleteSelectField('archaeological_site', required=False) diff --git a/archaeological_context_records/templates/ishtar/sheet_contextrecord.html b/archaeological_context_records/templates/ishtar/sheet_contextrecord.html index 108f5ace5..a7d01c6dd 100644 --- a/archaeological_context_records/templates/ishtar/sheet_contextrecord.html +++ b/archaeological_context_records/templates/ishtar/sheet_contextrecord.html @@ -118,7 +118,7 @@ </div> </div> {% else %} - <div class='row'> + <div> <p class='window-refs'>{{ item.parcel.short_label }}</p> <p class="window-refs">{{ item.label|default:"" }}</p> {% include "ishtar/blocks/sheet_external_id.html" %} diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index d9ebe9dfe..1dd56a82e 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -704,12 +704,13 @@ class FindBasket(Basket, MainItem, ValueGetter): _(u"Add treatment file"), "fa fa-file-text-o", "", "", False), ] - duplicate = self.get_quick_action_by_url("findbasket-qa-duplicate") - actions += [ - (reverse(duplicate.url, args=[self.pk]), - duplicate.text, duplicate.icon_class, - "", "", True), - ] + if can_edit_find: + duplicate = self.get_quick_action_by_url("findbasket-qa-duplicate") + actions += [ + (reverse(duplicate.url, args=[self.pk]), + duplicate.text, duplicate.icon_class, + "", "", True), + ] return actions diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 22b6cac33..e07c8fe0e 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1848,7 +1848,7 @@ class DocumentItem(object): For sheet template: return "Add document / image" action """ # url, base_text, icon, extra_text, extra css class, is a quick action - actions = [] + actions = super(DocumentItem, self).get_extra_actions(request) if not hasattr(self, 'SLUG'): return actions @@ -1857,7 +1857,7 @@ class DocumentItem(object): if can_add_doc and ( not hasattr(self, "is_locked") or not self.is_locked(request.user)): - actions = [ + actions += [ ( reverse("create-document") + "?{}={}".format( self.SLUG, self.pk), @@ -2574,6 +2574,7 @@ class QuickAction(object): class MainItem(ShortMenuItem): """ Item with quick actions available from tables + Extra actions are available from sheets """ QUICK_ACTIONS = [] @@ -2598,6 +2599,35 @@ class MainItem(ShortMenuItem): if action.url == url: return action + def regenerate_external_id(self): + if not hasattr(self, "external_id"): + return + self.skip_history_when_saving = True + self._no_move = True + if hasattr(self, "auto_external_id"): + self.external_id = None + self.save() + + def get_extra_actions(self, request): + if not hasattr(self, 'SLUG'): + return [] + + actions = [] + if request.user.is_superuser and hasattr(self, "auto_external_id"): + actions += [ + ( + reverse("regenerate-external-id") + "?{}={}".format( + self.SLUG, self.pk), + _("Regenerate ID"), + "fa fa-key", + _("regen."), + "", + True + ) + ] + + return actions + class LightHistorizedItem(BaseHistorizedItem): history_date = models.DateTimeField(default=datetime.datetime.now) diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index 0d524b668..3b7ced5ae 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -277,6 +277,10 @@ urlpatterns += [ url(r'show-shortcut-menu/$', views.show_shortcut_menu, name='show-shortcut-menu'), + url(r'regenerate-external-id/$', views.regenerate_external_id, + name='regenerate-external-id'), + + url(r'document/search/(?P<step>.+)?$', check_rights(['view_document', 'view_own_document'])( views.document_search_wizard), diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index d22a89916..aae2783c7 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -1483,6 +1483,14 @@ def find_all_symlink(dirname): yield full, os.readlink(full) +def get_model_by_slug(slug): + all_models = apps.get_models() + for model in all_models: + if hasattr(model, "SLUG") and model.SLUG == slug: + return model + return + + MEDIA_RE = [ re.compile(r"_[a-zA-Z0-9]{7}\-[0-9]"), re.compile(r"_[a-zA-Z0-9]{7}"), diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 7b7a890fb..b44e07f48 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -65,7 +65,7 @@ from ishtar_common.models import get_current_profile from ishtar_common.templatetags.link_to_window import simple_link_to_window from ishtar_common.utils import clean_session_cache, CSV_OPTIONS, \ get_field_labels_from_path, get_random_item_image_link, shortify, \ - dict_to_tuple, put_session_message + dict_to_tuple, put_session_message, get_model_by_slug from ishtar_common.widgets import JQueryAutoComplete from .views_item import CURRENT_ITEM_KEYS, CURRENT_ITEM_KEYS_DICT, \ @@ -973,6 +973,24 @@ def merge_action(model, form, key): return merge +def regenerate_external_id(request): + if not request.user.is_superuser: + raise Http404() + model = None + for key in request.GET: + model = get_model_by_slug(key) + if model: + break + if not model: + raise Http404() + try: + item = model.objects.get(pk=request.GET[model.SLUG]) + except model.DoesNotExist: + raise Http404() + item.regenerate_external_id() + return HttpResponseRedirect(reverse("success")) + + person_merge = merge_action(models.Person, forms.MergePersonForm, 'person') organization_merge = merge_action( models.Organization, |