summaryrefslogtreecommitdiff
path: root/archaeological_finds/models_finds.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/models_finds.py')
-rw-r--r--archaeological_finds/models_finds.py26
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