summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_context_records/forms.py23
-rw-r--r--archaeological_context_records/urls.py12
-rw-r--r--archaeological_context_records/views.py34
-rw-r--r--archaeological_finds/models_finds.py2
-rw-r--r--archaeological_finds/urls.py12
-rw-r--r--archaeological_finds/views.py1
-rw-r--r--ishtar_common/models_common.py10
-rw-r--r--ishtar_common/templates/ishtar/blocks/sheet_dating_list.html6
8 files changed, 72 insertions, 28 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index 36f6ea516..75b6d71ef 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -935,17 +935,18 @@ class QADating(ManageOldType, forms.Form):
def clean(self):
data = self.cleaned_data
reference = data['reference']
- q_attr = {
- "reference": reference,
- self.dating_model.CURRENT_MODEL_ATTR + "_id": self.current_item.pk
- }
- q = self.dating_model.objects.filter(**q_attr)
- if data.get("pk", None):
- q = q.exclude(pk=data["pk"])
- if q.count():
- raise forms.ValidationError(
- _("This reference already exists for this item.")
- )
+ if reference:
+ q_attr = {
+ "reference": reference,
+ self.dating_model.CURRENT_MODEL_ATTR + "_id": self.current_item.pk
+ }
+ q = self.dating_model.objects.filter(**q_attr)
+ if data.get("pk", None):
+ q = q.exclude(pk=data["pk"])
+ if q.count():
+ raise forms.ValidationError(
+ _("This reference already exists for this item.")
+ )
if any(1 for k in self.cleaned_data if self.cleaned_data[k]):
return data
raise forms.ValidationError(_("No data provided."))
diff --git a/archaeological_context_records/urls.py b/archaeological_context_records/urls.py
index ec529deeb..fe2b6bde1 100644
--- a/archaeological_context_records/urls.py
+++ b/archaeological_context_records/urls.py
@@ -161,14 +161,22 @@ urlpatterns = [
),
name="context-record-relation-modify",
),
- re_path(
- r"^context-record-dating/(?P<pk>.+)/$",
+ path(
+ "context-record-dating/<int:pk>/",
check_permissions(["archaeological_context_records.change_contextrecord",
"archaeological_context_records.change_own_contextrecord"])(
views.context_record_dating_add
),
name="context-record-dating-add",
),
+ path(
+ "context-record-dating/<int:pk>/<int:dating_pk>/",
+ check_permissions(["archaeological_context_records.change_contextrecord",
+ "archaeological_context_records.change_own_contextrecord"])(
+ views.context_record_dating_modify
+ ),
+ name="context-record-dating-modify",
+ ),
re_path(
r"^operation-qa-contextrecord/(?P<pks>[0-9]+)/$",
check_permissions(["archaeological_context_records.add_contextrecord"])(
diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py
index 28fb6b18f..057e3ab61 100644
--- a/archaeological_context_records/views.py
+++ b/archaeological_context_records/views.py
@@ -195,8 +195,8 @@ context_record_modify_relations = get_relation_modify(
)
-def get_dating_form(model, dating_model, url_name, action='add'):
- def _dating_add(request, pk, current_right=None):
+def get_dating_form(model, dating_model, url_name):
+ def _dating_form(request, pk, dating_pk=None, current_right=None):
try:
item = model.objects.get(pk=pk)
except model.DoesNotExist:
@@ -207,6 +207,18 @@ def get_dating_form(model, dating_model, url_name, action='add'):
elif current_right:
if not request.user.has_perm(current_right):
raise PermissionDenied()
+ initial = {}
+ if dating_pk:
+ try:
+ dating_item = dating_model.objects.get(pk=dating_pk)
+ initial = dict(
+ (attr, getattr(dating_item, attr))
+ for attr in [
+ "pk", "reference", "period_id", "start_date", "end_date",
+ "quality_id", "dating_type_id", "precise_dating"]
+ )
+ except dating_model.DoesNotExist:
+ raise Http404()
if request.method == 'POST':
form = forms.QADating(request.POST, dating_model=dating_model,
current_item=item)
@@ -215,9 +227,12 @@ def get_dating_form(model, dating_model, url_name, action='add'):
return HttpResponseRedirect(reverse("success"))
else:
form = forms.QADating(dating_model=dating_model,
- current_item=item)
- button_name = _("Add") if action == "add" else _("Modify")
- icon = "fa fa-plus" if action == "add" else "fa fa-pencil"
+ current_item=item, initial=initial)
+ button_name = _("Add") if not dating_pk else _("Modify")
+ icon = "fa fa-plus" if not dating_pk else "fa fa-pencil"
+ url_args = [pk]
+ if dating_pk:
+ url_args.append(dating_pk)
return render(
request,
"ishtar/forms/qa_form.html", {
@@ -225,9 +240,9 @@ def get_dating_form(model, dating_model, url_name, action='add'):
"icon": icon,
"action_name": button_name,
"form": form,
- "url": reverse(url_name, args=[pk])
+ "url": reverse(url_name, args=url_args)
})
- return _dating_add
+ return _dating_form
context_record_dating_add = get_dating_form(
@@ -235,6 +250,11 @@ context_record_dating_add = get_dating_form(
)
+context_record_dating_modify = get_dating_form(
+ models.ContextRecord, models.ContextRecordDating, "context-record-dating-modify"
+)
+
+
class GenerateRelationImage(IshtarMixin, LoginRequiredMixin, RedirectView):
upper_model = models.Operation
model = models.ContextRecord
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index b79c21c69..8f295e4f8 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -2711,7 +2711,7 @@ class Find(
return lst
def m2m_listing_datings(self) -> list:
- return [dating.full_serialize() for dating in self.datings.all()]
+ return [dating.full_serialize(keep_id=True) for dating in self.datings.all()]
DOC_VALUES = [
("base_finds", _("List of associated base finds")),
diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py
index f36157c75..188e0e532 100644
--- a/archaeological_finds/urls.py
+++ b/archaeological_finds/urls.py
@@ -75,14 +75,22 @@ urlpatterns = [
)(views.QAFindDuplicateFormView.as_view()),
name="find-qa-duplicate",
),
- re_path(
- r"^find-dating/(?P<pk>.+)/$",
+ path(
+ "find-dating/<int:pk>/",
check_permissions(["archaeological_finds.change_find",
"archaeological_finds.change_own_find"])(
views.find_dating_add
),
name="find-dating-add",
),
+ path(
+ "find-dating/<int:pk>/<int:dating_pk>/",
+ check_permissions(["archaeological_finds.change_find",
+ "archaeological_finds.change_own_find"])(
+ views.find_dating_modify
+ ),
+ name="find-dating-modify",
+ ),
re_path(r"get-findbasket/$", views.get_find_basket, name="get-findbasket"),
re_path(
r"get-findbasket-write/$",
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index 0e9d46c16..9c10f65ae 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -1428,6 +1428,7 @@ class QAFindLockView(QABaseLockView):
find_dating_add = get_dating_form(models.Find, models.FindDating, "find-dating-add")
+find_dating_modify = get_dating_form(models.Find, models.FindDating, "find-dating-modify")
def get_geo_items(request, current_right=None):
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 821a89ac4..00ff8babd 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -3306,7 +3306,7 @@ class SerializeItem:
SERIALIZATION_FILES = []
SERIALIZE_STRING = []
- def full_serialize(self, search_model=None, recursion=False, request=None) -> dict:
+ def full_serialize(self, search_model=None, recursion=False, request=None, keep_id=False) -> dict:
"""
API serialization
:return: data dict
@@ -3418,8 +3418,12 @@ class SerializeItem:
continue
full_result[k] = getattr(self, self.SERIALIZE_CALL[k])()
full_result["SLUG"] = self.SLUG
- full_result["pk"] = f"external_{self.pk}"
- full_result["id"] = f"external_{self.id}"
+ if not keep_id:
+ full_result["pk"] = f"external_{self.pk}"
+ full_result["id"] = f"external_{self.id}"
+ else:
+ full_result["pk"] = self.pk
+ full_result["id"] = self.id
return full_result
def get_associated_main_item_list(self, attr, model) -> list:
diff --git a/ishtar_common/templates/ishtar/blocks/sheet_dating_list.html b/ishtar_common/templates/ishtar/blocks/sheet_dating_list.html
index f4ec6c33a..cc1add777 100644
--- a/ishtar_common/templates/ishtar/blocks/sheet_dating_list.html
+++ b/ishtar_common/templates/ishtar/blocks/sheet_dating_list.html
@@ -33,9 +33,11 @@
<td>
{{dating.precise_dating|default_if_none:"-"}}
</td>
- {% if can_change %}
+ {% if can_change and dating.pk %}
<td>
- <a class="btn btn-success btn-sm" title="Modifier" href="/geo/edit/37130/?find_id=94034&amp;back_url=/find_search/%3Fopen_item=46434"><i class="fa fa-pencil"></i></a>
+ <a class="btn btn-qa btn-success btn-sm" title="{% trans 'Modify' %}"
+ href="#" data-target="{% url url_dating|add:'-modify' item.pk dating.pk %}">
+ <i class="fa fa-pencil"></i></a>
</td>
<td>
<a class="btn btn-danger btn-sm" title="Supprimer" href="/geo/delete/37130/?find_id=94034&amp;back_url=/find_search/%3Fopen_item=46434">