summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit13cc881d6eb1da1ab4abed8dc11d2574ce37edda (patch)
tree0ff4927ac85605a24df691361e8306175abfbefb
parent93b83586f6b291ac4c4b2ac30ceb96aede1cf650 (diff)
downloadIshtar-13cc881d6eb1da1ab4abed8dc11d2574ce37edda.tar.bz2
Ishtar-13cc881d6eb1da1ab4abed8dc11d2574ce37edda.zip
Extra actions: regenerate external_id
-rw-r--r--archaeological_context_records/admin.py2
-rw-r--r--archaeological_context_records/templates/ishtar/sheet_contextrecord.html2
-rw-r--r--archaeological_finds/models_finds.py13
-rw-r--r--ishtar_common/models.py34
-rw-r--r--ishtar_common/urls.py4
-rw-r--r--ishtar_common/utils.py8
-rw-r--r--ishtar_common/views.py20
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,