summaryrefslogtreecommitdiff
path: root/archaeological_operations
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2023-03-08 13:18:44 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2023-03-08 13:53:26 +0100
commit4135c16fc28925ba8a42006d1e2849829b7e4ddd (patch)
tree5ceaff0b2e85bb35944a697fff2d3d2e76e9546d /archaeological_operations
parent5ec494564251e27e3f802e6c1aec3c6aa1890488 (diff)
downloadIshtar-4135c16fc28925ba8a42006d1e2849829b7e4ddd.tar.bz2
Ishtar-4135c16fc28925ba8a42006d1e2849829b7e4ddd.zip
Site: quick add operation action (refs #4450)
Diffstat (limited to 'archaeological_operations')
-rw-r--r--archaeological_operations/models.py22
-rw-r--r--archaeological_operations/urls.py11
-rw-r--r--archaeological_operations/views.py21
3 files changed, 51 insertions, 3 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index 091e1e60c..ee2023f5c 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -470,6 +470,14 @@ class ArchaeologicalSite(
QA_EDIT,
QA_LOCK,
QuickAction(
+ url="site-add-operation",
+ icon_class="fa fa-plus",
+ text=_("Create associated operation"),
+ target="many",
+ rights=["change_operation"],
+ is_popup=False
+ ),
+ QuickAction(
url="site-qa-duplicate",
icon_class="fa fa-clone",
text=_("Duplicate"),
@@ -620,10 +628,22 @@ class ArchaeologicalSite(
actions.append(self.get_add_geo_action())
can_create_operation = self.can_do(request, "change_operation")
+ if can_create_operation and not self.operations.count():
+ actions.append(
+ (
+ reverse("site-add-operation", args=[self.pk]),
+ _("Create an operation associated to this site"),
+ "fa fa-plus",
+ _("ope."),
+ "",
+ False
+ )
+ )
+
if can_create_operation and self.operations.count():
actions.append(
(
- reverse("site-qa-top-operation", args=[self.pk]),
+ reverse("site-add-top-operation", args=[self.pk]),
_("Create a cluster operation for site associated to many operations"),
"fa fa-plus",
_("top ope."),
diff --git a/archaeological_operations/urls.py b/archaeological_operations/urls.py
index cf4ab6489..7e2b71589 100644
--- a/archaeological_operations/urls.py
+++ b/archaeological_operations/urls.py
@@ -356,11 +356,18 @@ urlpatterns = [
kwargs={"confirm": True},
),
url(
- r"^site-qa-top-operation/(?P<pks>\d+)?/$",
+ r"^site-add-operation/(?P<pks>[0-9-]+)?/$",
+ check_rights(["change_operation"])(
+ views.site_add_operation
+ ),
+ name="site-add-operation",
+ ),
+ url(
+ r"^site-add-top-operation/(?P<pks>\d+)?/$",
check_rights(["change_operation"])(
views.site_add_top_operation
),
- name="site-qa-top-operation",
+ name="site-add-top-operation",
),
url(
r"generate-stats-operation/(?P<pk>.+)/",
diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py
index 7bbc4c0b4..8fa7e08c0 100644
--- a/archaeological_operations/views.py
+++ b/archaeological_operations/views.py
@@ -584,6 +584,27 @@ def site_delete(request, pk):
return redirect(reverse(wizard_url, kwargs={"step": "final-" + wizard_url}))
+def site_add_operation(request, pks, current_right=None):
+ pks = [int(p) for p in pks.split("-")]
+ for pk in pks:
+ q = models.ArchaeologicalSite.objects.filter(pk=pk)
+ if not q.count():
+ raise Http404()
+ site = q.all()[0]
+ if not site.can_do(request, "view_archaeologicalsite") \
+ or site.operations.count():
+ raise Http404()
+ # operation add permission checked on view call
+ operation_creation_wizard(request)
+ wizards.OperationWizard.session_set_value(
+ request, "general-operation_creation", "archaeological_site", pks,
+ reset=True
+ )
+ return redirect(
+ reverse("operation_creation", kwargs={"step": "general-operation_creation"})
+ )
+
+
def site_add_top_operation(request, pks, current_right=None):
q = models.ArchaeologicalSite.objects.filter(pk=pks)
if not q.count():