From 0e30743556cdf9b6f8268cb8e24b24abf76a2e2b Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 29 May 2019 12:05:49 +0200 Subject: QA: duplicate find --- archaeological_finds/models_finds.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'archaeological_finds/models_finds.py') diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index ad9e2a822..4f28b977c 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -1384,6 +1384,10 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, QUICK_ACTIONS = [ QA_EDIT, + QuickAction( + url="find-qa-duplicate", icon_class="fa fa-clone", + text=_(u"Duplicate"), target="one", + rights=['change_find', 'change_own_find']), QuickAction( url="find-qa-basket", icon_class="fa fa-shopping-basket", text=_(u"Basket"), target="many", @@ -1686,6 +1690,8 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, can_edit_find = self.can_do(request, 'change_find') if can_edit_find: actions += [ + (reverse("find-qa-duplicate", args=[self.pk]), + _("Duplicate"), "fa fa-clone", "", "", True), (reverse("find-qa-basket", args=[self.pk]), _(u"Add to basket"), "fa fa-shopping-basket", "", "", True), @@ -1873,13 +1879,14 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, base_finds__context_record__operation__pk=operation_id) @classmethod - def get_total_number(cls, fltr={}): + def get_total_number(cls, fltr=None): q = cls.objects if fltr: q = q.filter(**fltr) return q.filter(downstream_treatment__isnull=True).count() - def duplicate(self, user, copy_datings=True): + def duplicate(self, user, copy_datings=True, duplicate_for_treatment=True, + data=None): model = self.__class__ new = model.objects.get(pk=self.pk) @@ -1889,8 +1896,13 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, # item will be created on save if field.name in PRIVATE_FIELDS: setattr(new, field.name, None) - new.order = self.order + 1 - new.history_order = user + new.order = self.order + if duplicate_for_treatment: + new.order += 1 + new.history_user = user + if data: + for k in data: + setattr(new, k, data[k]) new.save() # m2m fields @@ -1913,6 +1925,12 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, for val in getattr(self, field).all(): if val not in getattr(new, field).all(): getattr(new, field).add(val) + if not duplicate_for_treatment: + bf = self.get_first_base_find() + new.base_finds.clear() + if bf: + new.base_finds.add(bf.duplicate( + user=user, data={"label": new.label, "external_id": None})) return new @classmethod -- cgit v1.2.3