diff options
Diffstat (limited to 'archaeological_finds/models_finds.py')
-rw-r--r-- | archaeological_finds/models_finds.py | 26 |
1 files changed, 22 insertions, 4 deletions
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 @@ -1385,6 +1385,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", rights=['change_find', 'change_own_find']), @@ -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 |