summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-12-02 14:15:05 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-12-02 14:15:05 +0100
commit3c3dc92e3aef6c479b0d5f020c7dc8c4ce76e532 (patch)
tree5d4355bb39ea5de6aeaf442d07cf91fcbfa85ebd
parentf832138b10e557fc8d4086fcdb7f1383516ccfde (diff)
downloadIshtar-3c3dc92e3aef6c479b0d5f020c7dc8c4ce76e532.tar.bz2
Ishtar-3c3dc92e3aef6c479b0d5f020c7dc8c4ce76e532.zip
Sheet quick actions to add treatments from find, basket and container
-rw-r--r--archaeological_finds/models_finds.py8
-rw-r--r--archaeological_finds/templates/ishtar/sheet_treatment.html2
-rw-r--r--archaeological_finds/urls.py9
-rw-r--r--archaeological_finds/views.py281
-rw-r--r--archaeological_finds/wizards.py2
-rw-r--r--archaeological_warehouse/models.py17
-rw-r--r--archaeological_warehouse/urls.py5
-rw-r--r--archaeological_warehouse/views.py13
-rw-r--r--ishtar_common/wizards.py54
9 files changed, 248 insertions, 143 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 5dc8abc98..ee6253109 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -616,6 +616,12 @@ class FindBasket(Basket, MainItem):
_(u"Manage basket"),
"fa fa-shopping-basket", "", "", False),
]
+ can_edit_find = self.can_do(request, 'change_find')
+ if can_edit_find:
+ actions += [
+ (reverse('findbasket-add-treatment', args=[self.pk]),
+ _(u"Add treatment"), "fa fa-exchange", "", "", False),
+ ]
duplicate = self.QUICK_ACTIONS[0]
actions += [
@@ -1237,6 +1243,8 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, OwnPerms,
(reverse("find-qa-basket", args=[self.pk]),
_(u"Add to basket"),
"fa fa-shopping-basket", "", "", True),
+ (reverse('find-add-treatment', args=[self.pk]),
+ _(u"Add treatment"), "fa fa-exchange", "", "", False),
]
if get_current_profile().warehouse:
actions.append(
diff --git a/archaeological_finds/templates/ishtar/sheet_treatment.html b/archaeological_finds/templates/ishtar/sheet_treatment.html
index ced305798..78460d002 100644
--- a/archaeological_finds/templates/ishtar/sheet_treatment.html
+++ b/archaeological_finds/templates/ishtar/sheet_treatment.html
@@ -109,8 +109,10 @@
{% dynamic_table_document finds 'finds_for_treatment' 'upstream_treatment' item.pk 'TABLE_COLS_FOR_OPE' output %}
{% endif %}
+ {% comment %}
{% trans "Related operations" as related_operations %}
{% dynamic_table_document related_operations 'operations' 'related_treatment' item.pk 'TABLE_COLS' output %}
+ {% endcomment %}
</div>
diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py
index c5a0f7aa2..cf3522d43 100644
--- a/archaeological_finds/urls.py
+++ b/archaeological_finds/urls.py
@@ -89,6 +89,15 @@ urlpatterns = [
views.QAFindbasketDuplicateFormView.as_view()),
name='findbasket-qa-duplicate'),
+ url(r'^findbasket-add-treatment/(?P<pk>[0-9-]+)/$',
+ check_rights(['change_find', 'change_own_find'])(
+ views.findbasket_treatment_add),
+ name='findbasket-add-treatment'),
+ url(r'^find-add-treatment/(?P<pk>[0-9-]+)/$',
+ check_rights(['change_find', 'change_own_find'])(
+ views.find_treatment_add),
+ name='find-add-treatment'),
+
url(r'^find-qa-bulk-update/(?P<pks>[0-9-]+)?/$',
check_rights(['change_find', 'change_own_find'])(
views.QAFindForm.as_view()),
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index 81b032d0b..620f33ef4 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -19,6 +19,7 @@
import json
+from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import HttpResponseRedirect, HttpResponse, Http404
@@ -27,18 +28,24 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic import TemplateView
from django.views.generic.edit import CreateView, FormView
+
+from ishtar_common.models import IshtarUser, get_current_profile
+from archaeological_operations.models import AdministrativeAct
+from archaeological_finds import models
+
+from ishtar_common.forms import FinalForm
from archaeological_context_records.forms \
import RecordFormSelection as RecordFormSelectionTable
from archaeological_operations.forms import FinalAdministrativeActDeleteForm
-from archaeological_operations.wizards import AdministrativeActDeletionWizard
-from forms import *
-from ishtar_common.forms import FinalForm
-from ishtar_common.models import IshtarUser, get_current_profile
+from archaeological_finds import forms
+
from ishtar_common.views import get_autocomplete_generic, IshtarMixin, \
LoginRequiredMixin, QAItemEditForm, QAItemForm
from ishtar_common.views_item import display_item, get_item, show_item, \
revert_item, get_autocomplete_item, get_autocomplete_query
-from wizards import *
+
+from archaeological_operations.wizards import AdministrativeActDeletionWizard
+from archaeological_finds import wizards
get_find = get_item(models.Find, 'get_find', 'find')
@@ -141,16 +148,17 @@ get_find_basket_for_write = get_item(
model_for_perms=models.Find, alt_query_own='get_write_query_owns'
)
-basket_search_wizard = FindBasketSearch.as_view(
- [('selec-find_basket_search', FindBasketFormSelection)],
+basket_search_wizard = wizards.FindBasketSearch.as_view(
+ [('selec-find_basket_search', forms.FindBasketFormSelection)],
label=_(u"Basket search"),
url_name='find_basket_search',
)
-basket_modify_wizard = FindBasketEditWizard.as_view(
+basket_modify_wizard = wizards.FindBasketEditWizard.as_view(
[
- ('selec-find_basket_modification', FindBasketForWriteFormSelection),
- ('basket-find_basket_modification', FindBasketForm),
+ ('selec-find_basket_modification',
+ forms.FindBasketForWriteFormSelection),
+ ('basket-find_basket_modification', forms.FindBasketForm),
('final-find_basket_modification', FinalForm)
],
label=_(u"Basket modify"),
@@ -161,7 +169,7 @@ basket_modify_wizard = FindBasketEditWizard.as_view(
def find_basket_modify(request, pk):
basket_modify_wizard(request)
key = 'selec-find_basket_modification'
- FindBasketEditWizard.session_set_value(
+ wizards.FindBasketEditWizard.session_set_value(
request, key, 'pk', pk, reset=True)
return redirect(
reverse('find_basket_modification',
@@ -169,12 +177,12 @@ def find_basket_modify(request, pk):
findbasket_deletion_steps = [
- ('selec-find_basket_deletion', FindBasketForWriteFormSelection),
+ ('selec-find_basket_deletion', forms.FindBasketForWriteFormSelection),
('final-find_basket_deletion', FinalForm)
]
-basket_delete_wizard = FindBasketDeletionWizard.as_view(
+basket_delete_wizard = wizards.FindBasketDeletionWizard.as_view(
findbasket_deletion_steps,
label=_(u"Basket deletion"),
url_name='find_basket_deletion',
@@ -195,9 +203,9 @@ def check_not_warehouse_module(self):
find_creation_steps = [
('selecrecord-find_creation', RecordFormSelectionTable),
- ('find-find_creation', FindForm),
- ('preservation-find_creation', PreservationForm),
- ('dating-find_creation', DatingFormSet),
+ ('find-find_creation', forms.FindForm),
+ ('preservation-find_creation', forms.PreservationForm),
+ ('dating-find_creation', forms.DatingFormSet),
('final-find_creation', FinalForm)
]
@@ -205,7 +213,7 @@ find_creation_condition_dict = {
'preservation-find_creation': check_preservation_module,
}
-find_creation_wizard = FindWizard.as_view(
+find_creation_wizard = wizards.FindWizard.as_view(
find_creation_steps,
label=_(u"New find"),
condition_dict=find_creation_condition_dict,
@@ -216,9 +224,9 @@ find_search_condition_dict = {
'generalwarehouse-find_search': check_warehouse_module,
}
-find_search_wizard = FindSearch.as_view([
- ('general-find_search', FindFormSelection),
- ('generalwarehouse-find_search', FindFormSelectionWarehouseModule)],
+find_search_wizard = wizards.FindSearch.as_view([
+ ('general-find_search', forms.FindFormSelection),
+ ('generalwarehouse-find_search', forms.FindFormSelectionWarehouseModule)],
label=_(u"Find search"),
url_name='find_search',
condition_dict=find_search_condition_dict
@@ -246,17 +254,17 @@ find_modification_condition_dict = {
}
find_modification_steps = [
- ('selec-find_modification', FindFormSelection),
- ('selecw-find_modification', FindFormSelectionWarehouseModule),
- ('selecrecord-find_modification', RecordFormSelection),
- ('find-find_modification', FindForm),
- ('simplefind-find_modification', SimpleFindForm),
- ('preservation-find_modification', PreservationForm),
- ('dating-find_modification', DatingFormSet),
+ ('selec-find_modification', forms.FindFormSelection),
+ ('selecw-find_modification', forms.FindFormSelectionWarehouseModule),
+ ('selecrecord-find_modification', forms.RecordFormSelection),
+ ('find-find_modification', forms.FindForm),
+ ('simplefind-find_modification', forms.SimpleFindForm),
+ ('preservation-find_modification', forms.PreservationForm),
+ ('dating-find_modification', forms.DatingFormSet),
('final-find_modification', FinalForm)
]
-find_modification_wizard = FindModificationWizard.as_view(
+find_modification_wizard = wizards.FindModificationWizard.as_view(
find_modification_steps,
condition_dict=find_modification_condition_dict,
label=_(u"Find modification"),
@@ -269,7 +277,7 @@ def find_modify(request, pk):
key = 'selec-find_modification'
if get_current_profile().warehouse:
key = 'selecw-find_modification'
- FindModificationWizard.session_set_value(
+ wizards.FindModificationWizard.session_set_value(
request, key, 'pk', pk, reset=True)
q = models.Find.objects.filter(pk=pk)
if not q.count():
@@ -287,11 +295,11 @@ find_deletion_condition_dict = {
}
find_deletion_steps = [
- ('selec-find_deletion', FindFormSelection),
- ('selecw-find_deletion', FindFormSelectionWarehouseModule),
- ('final-find_deletion', FindDeletionForm)]
+ ('selec-find_deletion', forms.FindFormSelection),
+ ('selecw-find_deletion', forms.FindFormSelectionWarehouseModule),
+ ('final-find_deletion', forms.FindDeletionForm)]
-find_deletion_wizard = FindDeletionWizard.as_view(
+find_deletion_wizard = wizards.FindDeletionWizard.as_view(
find_deletion_steps,
condition_dict=find_deletion_condition_dict,
label=_(u"Find deletion"),
@@ -306,7 +314,7 @@ autocomplete_integritytype = get_autocomplete_generic(models.IntegrityType)
class NewFindBasketView(IshtarMixin, LoginRequiredMixin, CreateView):
template_name = 'ishtar/form.html'
model = models.FindBasket
- form_class = NewFindBasketForm
+ form_class = forms.NewFindBasketForm
page_name = _(u"New basket")
def get_form_kwargs(self):
@@ -335,7 +343,7 @@ class OwnBasket(object):
class SelectBasketForManagement(IshtarMixin, LoginRequiredMixin, FormView):
template_name = 'ishtar/form.html'
- form_class = SelectFindBasketForm
+ form_class = forms.SelectFindBasketForm
page_name = _(u"Manage items in basket")
def get_form_kwargs(self):
@@ -368,9 +376,9 @@ class SelectItemsInBasket(OwnBasket, IshtarMixin, LoginRequiredMixin,
)
context['basket'] = self.basket
if get_current_profile().warehouse:
- context['form'] = MultipleFindFormSelectionWarehouseModule()
+ context['form'] = forms.MultipleFindFormSelectionWarehouseModule()
else:
- context['form'] = MultipleFindFormSelection()
+ context['form'] = forms.MultipleFindFormSelection()
context['add_url'] = reverse('add_iteminbasket')
context['list_url'] = reverse('list_iteminbasket',
kwargs={'pk': self.basket.pk})
@@ -382,7 +390,7 @@ class SelectItemsInBasket(OwnBasket, IshtarMixin, LoginRequiredMixin,
class FindBasketAddItemView(IshtarMixin, LoginRequiredMixin, FormView):
template_name = 'ishtar/simple_form.html'
- form_class = FindBasketAddItemForm
+ form_class = forms.FindBasketAddItemForm
def get_success_url(self, basket):
return reverse('list_iteminbasket', kwargs={'pk': basket.pk})
@@ -448,53 +456,53 @@ get_downstreamtreatment = get_item(
'downtreatment')
treatment_wizard_steps = [
- ('selecfind-treatment_creation', UpstreamFindFormSelection),
- ('file-treatment_creation', TreatmentFormFileChoice),
- ('basetreatment-treatment_creation', BaseTreatmentForm),
+ ('selecfind-treatment_creation', forms.UpstreamFindFormSelection),
+ ('file-treatment_creation', forms.TreatmentFormFileChoice),
+ ('basetreatment-treatment_creation', forms.BaseTreatmentForm),
('final-treatment_creation', FinalForm)
]
-treatment_search_wizard = TreatmentSearch.as_view([
- ('general-treatment_search', TreatmentFormSelection)],
+treatment_search_wizard = wizards.TreatmentSearch.as_view([
+ ('general-treatment_search', forms.TreatmentFormSelection)],
label=_(u"Treatment search"),
url_name='treatment_search',)
-treatment_creation_wizard = TreatmentWizard.as_view(
+treatment_creation_wizard = wizards.TreatmentWizard.as_view(
treatment_wizard_steps,
label=_(u"New treatment"),
url_name='treatment_creation',)
treatment_n1_wizard_steps = [
- ('selecfind-treatment_creation_n1', UpstreamFindFormSelection),
- ('file-treatment_creation_n1', TreatmentFormFileChoice),
- ('basetreatment-treatment_creation_n1', N1TreatmentForm),
- ('resultingfind-treatment_creation_n1', ResultingFindForm),
+ ('selecfind-treatment_creation_n1', forms.UpstreamFindFormSelection),
+ ('file-treatment_creation_n1', forms.TreatmentFormFileChoice),
+ ('basetreatment-treatment_creation_n1', forms.N1TreatmentForm),
+ ('resultingfind-treatment_creation_n1', forms.ResultingFindForm),
('final-treatment_creation_n1', FinalForm)
]
-treatment_creation_n1_wizard = TreatmentN1Wizard.as_view(
+treatment_creation_n1_wizard = wizards.TreatmentN1Wizard.as_view(
treatment_n1_wizard_steps,
label=_(u"New treatment"),
url_name='treatment_creation_n1',)
treatment_1n_wizard_steps = [
- ('selecfind-treatment_creation_1n', SingleUpstreamFindFormSelection),
- ('file-treatment_creation_1n', TreatmentFormFileChoice),
- ('basetreatment-treatment_creation_1n', OneNTreatmentForm),
- ('resultingfinds-treatment_creation_1n', ResultingFindsForm),
+ ('selecfind-treatment_creation_1n', forms.SingleUpstreamFindFormSelection),
+ ('file-treatment_creation_1n', forms.TreatmentFormFileChoice),
+ ('basetreatment-treatment_creation_1n', forms.OneNTreatmentForm),
+ ('resultingfinds-treatment_creation_1n', forms.ResultingFindsForm),
('final-treatment_creation_1n', FinalForm)
]
-treatment_creation_1n_wizard = Treatment1NWizard.as_view(
+treatment_creation_1n_wizard = wizards.Treatment1NWizard.as_view(
treatment_1n_wizard_steps,
label=_(u"New treatment"),
url_name='treatment_creation_1n',)
-treatment_modification_wizard = TreatmentModificationWizard.as_view(
- [('selec-treatment_modification', TreatmentFormSelection),
- ('file-treatment_modification', TreatmentFormFileChoice),
- ('basetreatment-treatment_modification', TreatmentModifyForm),
+treatment_modification_wizard = wizards.TreatmentModificationWizard.as_view(
+ [('selec-treatment_modification', forms.TreatmentFormSelection),
+ ('file-treatment_modification', forms.TreatmentFormFileChoice),
+ ('basetreatment-treatment_modification', forms.TreatmentModifyForm),
('final-treatment_modification', FinalForm)],
label=_(u"Treatment modification"),
url_name='treatment_modification',
@@ -503,41 +511,77 @@ treatment_modification_wizard = TreatmentModificationWizard.as_view(
def treatment_modify(request, pk):
treatment_modification_wizard(request)
- TreatmentModificationWizard.session_set_value(
+ wizards.TreatmentModificationWizard.session_set_value(
request, 'selec-treatment_modification', 'pk', pk, reset=True)
return redirect(reverse(
'treatment_modification',
kwargs={'step': 'basetreatment-treatment_modification'}))
-treatment_deletion_wizard = TreatmentDeletionWizard.as_view([
- ('selec-treatment_deletion', TreatmentFormSelection),
- ('final-treatment_deletion', TreatmentDeletionForm)],
+def treatment_add(request, pks):
+ treatment_creation_wizard(request)
+ wizards.TreatmentWizard.session_set_value(
+ request, 'selecfind-treatment_creation',
+ 'resulting_pk', pks, reset=True)
+ wizards.TreatmentWizard.session_set_value(
+ request, 'file-treatment_creation', 'file', '')
+ return redirect(reverse(
+ 'treatment_creation',
+ kwargs={'step': 'basetreatment-treatment_creation'}))
+
+
+def find_treatment_add(request, pk, current_right=None):
+ if not models.Find.objects.filter(pk=pk).count():
+ raise Http404()
+ return treatment_add(request, str(pk))
+
+
+def findbasket_treatment_add(request, pk, current_right=None):
+ try:
+ basket = models.FindBasket.objects.get(pk=pk)
+ except models.FindBasket.DoesNotExist:
+ raise Http404()
+ return treatment_add(
+ request, ",".join([str(f.pk) for f in basket.items.all()]))
+
+
+def container_treatment_add(request, pk, current_right=None):
+ try:
+ basket = models.FindBasket.objects.get(pk=pk)
+ except models.FindBasket.DoesNotExist:
+ raise Http404()
+ return treatment_add(request,
+ ",".join([str(f.pk) for f in basket.items.all()]))
+
+
+treatment_deletion_wizard = wizards.TreatmentDeletionWizard.as_view([
+ ('selec-treatment_deletion', forms.TreatmentFormSelection),
+ ('final-treatment_deletion', forms.TreatmentDeletionForm)],
label=_(u"Treatment deletion"),
url_name='treatment_deletion',)
treatment_administrativeact_search_wizard = \
- SearchWizard.as_view([
+ wizards.SearchWizard.as_view([
('selec-treatment_admacttreatment_search',
- AdministrativeActTreatmentFormSelection)],
+ forms.AdministrativeActTreatmentFormSelection)],
label=_(u"Treatment: search administrative act"),
url_name='treatment_admacttreatment_search',)
treatment_administrativeact_wizard = \
- TreatmentAdministrativeActWizard.as_view([
- ('selec-treatment_admacttreatment', TreatmentFormSelection),
+ wizards.TreatmentAdministrativeActWizard.as_view([
+ ('selec-treatment_admacttreatment', forms.TreatmentFormSelection),
('administrativeact-treatment_admacttreatment',
- AdministrativeActTreatmentForm),
+ forms.AdministrativeActTreatmentForm),
('final-treatment_admacttreatment', FinalForm)],
label=_(u"Treatment: new administrative act"),
url_name='treatment_admacttreatment',)
treatment_administrativeact_modification_wizard = \
- TreatmentEditAdministrativeActWizard.as_view([
+ wizards.TreatmentEditAdministrativeActWizard.as_view([
('selec-treatment_admacttreatment_modification',
- AdministrativeActTreatmentFormSelection),
+ forms.AdministrativeActTreatmentFormSelection),
('administrativeact-treatment_admacttreatment_modification',
- AdministrativeActTreatmentModifForm),
+ forms.AdministrativeActTreatmentModifForm),
('final-treatment_admacttreatment_modification', FinalForm)],
label=_(u"Treatment: administrative act modification"),
url_name='treatment_admacttreatment_modification',)
@@ -545,7 +589,7 @@ treatment_administrativeact_modification_wizard = \
treatment_admacttreatment_deletion_wizard = \
AdministrativeActDeletionWizard.as_view([
('selec-treatment_admacttreatment_deletion',
- AdministrativeActTreatmentFormSelection),
+ forms.AdministrativeActTreatmentFormSelection),
('final-treatment_admacttreatment_deletion',
FinalAdministrativeActDeleteForm)],
label=_(u"Treatment: administrative act deletion"),
@@ -554,7 +598,7 @@ treatment_admacttreatment_deletion_wizard = \
def treatment_administrativeacttreatment_modify(request, pk):
treatment_administrativeact_modification_wizard(request)
- TreatmentEditAdministrativeActWizard.session_set_value(
+ wizards.TreatmentEditAdministrativeActWizard.session_set_value(
request,
'selec-treatment_admacttreatment_modification',
'pk', pk, reset=True)
@@ -569,67 +613,70 @@ def treatment_administrativeacttreatment_modify(request, pk):
# treatment request
-treatmentfile_search_wizard = TreatmentFileSearch.as_view([
- ('general-treatmentfile_search', TreatmentFileFormSelection)],
+treatmentfile_search_wizard = wizards.TreatmentFileSearch.as_view([
+ ('general-treatmentfile_search', forms.TreatmentFileFormSelection)],
label=_(u"Treatment request search"),
url_name='treatmentfile_search',)
treatmentfile_wizard_steps = [
- ('treatmentfile-treatmentfile_creation', TreatmentFileForm),
+ ('treatmentfile-treatmentfile_creation', forms.TreatmentFileForm),
('final-treatmentfile_creation', FinalForm)]
-treatmentfile_creation_wizard = TreatmentFileWizard.as_view(
+treatmentfile_creation_wizard = wizards.TreatmentFileWizard.as_view(
treatmentfile_wizard_steps,
label=_(u"New treatment request"),
url_name='treatmentfile_creation',)
-treatmentfile_modification_wizard = TreatmentFileModificationWizard.as_view(
- [('selec-treatmentfile_modification', TreatmentFileFormSelection),
- ('treatmentfile-treatmentfile_modification', TreatmentFileModifyForm),
- ('final-treatmentfile_modification', FinalForm)],
- label=_(u"Treatment request modification"),
- url_name='treatmentfile_modification',
-)
+treatmentfile_modification_wizard = \
+ wizards.TreatmentFileModificationWizard.as_view(
+ [('selec-treatmentfile_modification', forms.TreatmentFileFormSelection),
+ ('treatmentfile-treatmentfile_modification',
+ forms.TreatmentFileModifyForm),
+ ('final-treatmentfile_modification', FinalForm)],
+ label=_(u"Treatment request modification"),
+ url_name='treatmentfile_modification',
+ )
def treatmentfile_modify(request, pk):
treatmentfile_modification_wizard(request)
- TreatmentFileModificationWizard.session_set_value(
+ wizards.TreatmentFileModificationWizard.session_set_value(
request, 'selec-treatmentfile_modification', 'pk', pk, reset=True)
return redirect(reverse(
'treatmentfile_modification',
kwargs={'step': 'treatmentfile-treatmentfile_modification'}))
-treatmentfile_deletion_wizard = TreatmentFileDeletionWizard.as_view([
- ('selec-treatmentfile_deletion', TreatmentFileFormSelection),
- ('final-treatmentfile_deletion', TreatmentFileDeletionForm)],
+treatmentfile_deletion_wizard = wizards.TreatmentFileDeletionWizard.as_view([
+ ('selec-treatmentfile_deletion', forms.TreatmentFileFormSelection),
+ ('final-treatmentfile_deletion', forms.TreatmentFileDeletionForm)],
label=_(u"Treatment request deletion"),
url_name='treatmentfile_deletion',)
treatmentfile_admacttreatmentfile_search_wizard = \
- SearchWizard.as_view([
+ wizards.SearchWizard.as_view([
('selec-treatmentfle_admacttreatmentfle_search',
- AdministrativeActTreatmentFileFormSelection)],
+ forms.AdministrativeActTreatmentFileFormSelection)],
label=_(u"Treatment request: search administrative act"),
url_name='treatmentfle_admacttreatmentfle_search',)
treatmentfile_admacttreatmentfile_wizard = \
- TreatmentFileAdministrativeActWizard.as_view([
- ('selec-treatmentfle_admacttreatmentfle', TreatmentFileFormSelection),
+ wizards.TreatmentFileAdministrativeActWizard.as_view([
+ ('selec-treatmentfle_admacttreatmentfle',
+ forms.TreatmentFileFormSelection),
('admact-treatmentfle_admacttreatmentfle',
- AdministrativeActTreatmentFileForm),
+ forms.AdministrativeActTreatmentFileForm),
('final-treatmentfle_admacttreatmentfle', FinalForm)],
label=_(u"Treatment request: new administrative act"),
url_name='treatmentfle_admacttreatmentfle',)
treatmentfile_admacttreatmentfile_modification_wizard = \
- TreatmentFileEditAdministrativeActWizard.as_view([
+ wizards.TreatmentFileEditAdministrativeActWizard.as_view([
('selec-treatmentfle_admacttreatmentfle_modification',
- AdministrativeActTreatmentFileFormSelection),
+ forms.AdministrativeActTreatmentFileFormSelection),
('admact-treatmentfle_admacttreatmentfle_modification',
- AdministrativeActTreatmentFileModifForm),
+ forms.AdministrativeActTreatmentFileModifForm),
('final-treatmentfle_admacttreatmentfle_modification', FinalForm)],
label=_(u"Treatment request: administrative act modification"),
url_name='treatmentfle_admacttreatmentfle_modification',)
@@ -637,7 +684,7 @@ treatmentfile_admacttreatmentfile_modification_wizard = \
treatmentfile_admacttreatmentfile_deletion_wizard = \
AdministrativeActDeletionWizard.as_view([
('selec-treatmentfle_admacttreatmentfle_deletion',
- AdministrativeActTreatmentFileFormSelection),
+ forms.AdministrativeActTreatmentFileFormSelection),
('final-treatmentfle_admacttreatmentfle_deletion',
FinalAdministrativeActDeleteForm)],
label=_(u"Treatment request: administrative act deletion"),
@@ -646,7 +693,7 @@ treatmentfile_admacttreatmentfile_deletion_wizard = \
def treatmentfile_administrativeacttreatmentfile_modify(request, pk):
treatmentfile_admacttreatmentfile_modification_wizard(request)
- TreatmentFileEditAdministrativeActWizard.session_set_value(
+ wizards.TreatmentFileEditAdministrativeActWizard.session_set_value(
request,
'selec-treatmentfle_admacttreatmentfle_modification',
'pk', pk, reset=True)
@@ -661,22 +708,26 @@ def treatmentfile_administrativeacttreatmentfile_modify(request, pk):
def reset_wizards(request):
for wizard_class, url_name in (
- (FindWizard, 'find_creation'),
- (FindModificationWizard, 'find_modification'),
- (FindDeletionWizard, 'find_deletion'),
- (TreatmentWizard, 'treatement_creation'),
- (TreatmentModificationWizard, 'treatment_modification'),
- (TreatmentDeletionWizard, 'treatment_deletion'),
- (TreatmentAdministrativeActWizard, 'treatment_admacttreatment'),
- (TreatmentEditAdministrativeActWizard,
+ (wizards.FindWizard, 'find_creation'),
+ (wizards.FindModificationWizard, 'find_modification'),
+ (wizards.FindDeletionWizard, 'find_deletion'),
+ (wizards.TreatmentWizard, 'treatement_creation'),
+ (wizards.TreatmentModificationWizard, 'treatment_modification'),
+ (wizards.TreatmentDeletionWizard, 'treatment_deletion'),
+ (wizards.TreatmentAdministrativeActWizard,
+ 'treatment_admacttreatment'),
+ (wizards.TreatmentEditAdministrativeActWizard,
'treatment_admacttreatment_modification'),
- (TreatmentDeletionWizard, 'treatment_admacttreatment_deletion'),
- (TreatmentFileWizard, 'treatmentfile_creation'),
- (TreatmentFileModificationWizard, 'treatmentfile_modification'),
- (TreatmentFileDeletionWizard, 'treatmentfile_deletion'),
- (TreatmentFileAdministrativeActWizard,
+ (wizards.TreatmentDeletionWizard,
+ 'treatment_admacttreatment_deletion'),
+ (wizards.TreatmentFileWizard,
+ 'treatmentfile_creation'),
+ (wizards.TreatmentFileModificationWizard,
+ 'treatmentfile_modification'),
+ (wizards.TreatmentFileDeletionWizard, 'treatmentfile_deletion'),
+ (wizards.TreatmentFileAdministrativeActWizard,
'treatmentfle_admacttreatmentfle'),
- (TreatmentFileEditAdministrativeActWizard,
+ (wizards.TreatmentFileEditAdministrativeActWizard,
'treatmentfle_admacttreatmentfle_modification'),
(AdministrativeActDeletionWizard,
'treatmentfle_admacttreatmentfle_deletion'),
@@ -686,13 +737,13 @@ def reset_wizards(request):
class QAFindForm(QAItemEditForm):
model = models.Find
- form_class = QAFindFormMulti
+ form_class = forms.QAFindFormMulti
class QAFindBasketFormView(QAItemForm):
template_name = 'ishtar/forms/qa_find_basket.html'
model = models.Find
- form_class = QAFindBasketForm
+ form_class = forms.QAFindBasketForm
page_name = _(u"Basket")
modal_size = "small"
@@ -712,7 +763,7 @@ class QAFindBasketFormView(QAItemForm):
class QAFindTreatmentFormView(QAItemForm):
template_name = 'ishtar/forms/qa_find_treatment.html'
model = models.Find
- form_class = QAFindTreatmentForm
+ form_class = forms.QAFindTreatmentForm
page_name = _(u"Packaging")
def get_quick_action(self):
@@ -734,7 +785,7 @@ class QAFindbasketDuplicateFormView(QAItemForm):
model = models.FindBasket
page_name = _(u"Duplicate")
modal_size = "small"
- form_class = QAFindbasketDuplicateForm
+ form_class = forms.QAFindbasketDuplicateForm
def get_quick_action(self):
return models.FindBasket.QUICK_ACTIONS[0]
diff --git a/archaeological_finds/wizards.py b/archaeological_finds/wizards.py
index 31881fe74..d523170eb 100644
--- a/archaeological_finds/wizards.py
+++ b/archaeological_finds/wizards.py
@@ -138,7 +138,7 @@ class TreatmentBase(Wizard):
models.Find.objects.get(pk=int(find_id.strip()))
for find_id in find_ids.split(u',')
]
- except(TypeError, ValueError, ObjectDoesNotExist):
+ except(TypeError, ValueError, AttributeError, ObjectDoesNotExist):
pass
def get_form_initial(self, step, data=None):
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py
index 5565bc504..92eaf5d2f 100644
--- a/archaeological_warehouse/models.py
+++ b/archaeological_warehouse/models.py
@@ -21,6 +21,7 @@ import datetime
from django.conf import settings
from django.contrib.gis.db import models
+from django.core.urlresolvers import reverse
from django.db.models import Q
from django.db.models.signals import post_save, post_delete
from django.template.defaultfilters import slugify
@@ -311,7 +312,7 @@ post_save.connect(post_save_cache, sender=ContainerType)
post_delete.connect(post_save_cache, sender=ContainerType)
-class Container(LightHistorizedItem, ImageModel):
+class Container(LightHistorizedItem, ImageModel, OwnPerms):
TABLE_COLS = ['reference', 'container_type__label', 'cached_location',
'cached_division', 'old_reference']
IMAGE_PREFIX = 'containers/'
@@ -570,6 +571,20 @@ class Container(LightHistorizedItem, ImageModel):
def set_localisation_9(self, context, value):
return self.set_localisation(8, value)
+ def get_extra_actions(self, request):
+ """
+ extra actions for the sheet template
+ """
+ # url, base_text, icon, extra_text, extra css class, is a quick action
+ actions = []
+ can_edit_find = self.can_do(request, 'change_find')
+ if can_edit_find:
+ actions += [
+ (reverse('container-add-treatment', args=[self.pk]),
+ _(u"Add treatment"), "fa fa-exchange", "", "", False),
+ ]
+ return actions
+
def pre_save(self):
if not self.index:
q = Container.objects.filter(responsible=self.responsible).order_by(
diff --git a/archaeological_warehouse/urls.py b/archaeological_warehouse/urls.py
index 5dce12ffa..47058a352 100644
--- a/archaeological_warehouse/urls.py
+++ b/archaeological_warehouse/urls.py
@@ -68,6 +68,11 @@ urlpatterns = [
url(r'warehouse-modify/(?P<pk>.+)/$',
views.warehouse_modify, name='warehouse_modify'),
+ url(r'^container-add-treatment/(?P<pk>[0-9-]+)/$',
+ check_rights(['change_find', 'change_own_find'])(
+ views.container_treatment_add),
+ name='container-add-treatment'),
+
url(r'^container_search/(?P<step>.+)?$',
check_rights(['view_container', 'view_own_container'])(
views.container_search_wizard),
diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py
index 0cd68dac6..83fd7f4e1 100644
--- a/archaeological_warehouse/views.py
+++ b/archaeological_warehouse/views.py
@@ -21,7 +21,7 @@ import json
from django.core.urlresolvers import reverse
from django.db.models import Q
-from django.http import HttpResponse
+from django.http import HttpResponse, Http404
from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _
@@ -35,6 +35,8 @@ from archaeological_warehouse.forms import WarehouseForm, ContainerForm, \
from ishtar_common.forms import FinalForm
from ishtar_common.views_item import get_item, show_item, new_item
+from archaeological_finds.views import treatment_add
+
from archaeological_warehouse.wizards import PackagingWizard, WarehouseSearch, \
WarehouseWizard, WarehouseModificationWizard, WarehouseDeletionWizard, \
ContainerSearch, ContainerWizard, ContainerModificationWizard, \
@@ -195,6 +197,15 @@ container_deletion_wizard = ContainerDeletionWizard.as_view([
label=_(u"Container deletion"),
url_name='container_deletion',)
+
+def container_treatment_add(request, pk, current_right=None):
+ try:
+ container = models.Container.objects.get(pk=pk)
+ except models.Container.DoesNotExist:
+ raise Http404()
+ return treatment_add(
+ request, ",".join([str(f.pk) for f in container.finds.all()]))
+
"""
warehouse_packaging_wizard = ItemSourceWizard.as_view([
('selec-warehouse_packaging', ItemsSelection),
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index 19eb312e1..446afc71e 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -147,36 +147,40 @@ class Wizard(IshtarWizard):
form, other_check)
return kwargs
+ def check_own_permissions(self, request, step, *args, **kwargs):
+ # reinit default dispatch of a wizard - not clean...
+ self.request = request
+ self.session = request.session
+ self.prefix = self.get_prefix(request, *args, **kwargs)
+ self.storage = get_storage(
+ self.storage_name, self.prefix, request,
+ getattr(self, 'file_storage', None))
+ self.steps = StepsHelper(self)
+
+ current_object = self.get_current_object()
+ ishtaruser = request.user.ishtaruser \
+ if hasattr(request.user, 'ishtaruser') else None
+
+ # not the first step and current object is not owned
+ if self.steps and self.steps.first != step and current_object:
+ is_own = current_object.is_own(
+ ishtaruser, alt_query_own=self.alt_is_own_method)
+ if not is_own:
+ messages.add_message(
+ request, messages.WARNING,
+ _(u"Permission error: you cannot do this action.")
+ )
+ self.session_reset(request, self.url_name)
+ return
+ return True
+
def dispatch(self, request, *args, **kwargs):
self.current_right = kwargs.get('current_right', None)
step = kwargs.get('step', None)
# check that the current object is really owned by the current user
if step and self.current_right and '_own_' in self.current_right:
-
- # reinit default dispatch of a wizard - not clean...
- self.request = request
- self.session = request.session
- self.prefix = self.get_prefix(request, *args, **kwargs)
- self.storage = get_storage(
- self.storage_name, self.prefix, request,
- getattr(self, 'file_storage', None))
- self.steps = StepsHelper(self)
-
- current_object = self.get_current_object()
- ishtaruser = request.user.ishtaruser \
- if hasattr(request.user, 'ishtaruser') else None
-
- # not the first step and current object is not owned
- if self.steps and self.steps.first != step and current_object:
- is_own = current_object.is_own(
- ishtaruser, alt_query_own=self.alt_is_own_method)
- if not is_own:
- messages.add_message(
- request, messages.WARNING,
- _(u"Permission error: you cannot do this action.")
- )
- self.session_reset(request, self.url_name)
- return HttpResponseRedirect('/')
+ if not self.check_permissions(request, step, *args, **kwargs):
+ return HttpResponseRedirect('/')
# extra filter on forms
self.filter_owns_items = True
else: