diff options
| -rw-r--r-- | archaeological_context_records/forms.py | 23 | ||||
| -rw-r--r-- | archaeological_context_records/urls.py | 12 | ||||
| -rw-r--r-- | archaeological_context_records/views.py | 34 | ||||
| -rw-r--r-- | archaeological_finds/models_finds.py | 2 | ||||
| -rw-r--r-- | archaeological_finds/urls.py | 12 | ||||
| -rw-r--r-- | archaeological_finds/views.py | 1 | ||||
| -rw-r--r-- | ishtar_common/models_common.py | 10 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/blocks/sheet_dating_list.html | 6 |
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&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&back_url=/find_search/%3Fopen_item=46434"> |
