summaryrefslogtreecommitdiff
path: root/archaeological_finds
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-05-11 17:33:47 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-06-12 08:44:34 +0200
commitcb2bdf1cf1ee85ddf68e93c29611024571961c5d (patch)
tree9730565001c023b38104b04fafad2ec1ff183373 /archaeological_finds
parent481279913a62416ce038b8eb82ad16b581fee7cf (diff)
downloadIshtar-cb2bdf1cf1ee85ddf68e93c29611024571961c5d.tar.bz2
Ishtar-cb2bdf1cf1ee85ddf68e93c29611024571961c5d.zip
Adapt forms and wizards to manage M2M images (refs #4076)
Diffstat (limited to 'archaeological_finds')
-rw-r--r--archaeological_finds/forms.py22
-rw-r--r--archaeological_finds/forms_treatments.py17
-rw-r--r--archaeological_finds/models.py7
-rw-r--r--archaeological_finds/models_finds.py17
-rw-r--r--archaeological_finds/views.py20
5 files changed, 56 insertions, 27 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 5614118ec..44d883b0f 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -28,7 +28,6 @@ from django.conf import settings
from django.core import validators
from django.core.exceptions import PermissionDenied
from django.forms.formsets import formset_factory
-from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
from ishtar_common.models import valid_id, valid_ids, get_current_profile, \
@@ -44,7 +43,7 @@ from ishtar_common.forms import FormSet, FloatField, \
ManageOldType, FieldType, IshtarForm, FormHeader
from ishtar_common.forms_common import get_town_field, \
- get_image_help, SourceSelect, CustomForm
+ SourceSelect, CustomForm, BaseImageForm, BaseImageFormset
from ishtar_common.utils import convert_coordinates_to_point
from ishtar_common import widgets
from bootstrap_datepicker.widgets import DatePicker
@@ -64,7 +63,7 @@ from archaeological_finds.forms_treatments import TreatmentSelect, \
AdministrativeActTreatmentFileModifForm, SourceTreatmentFormSelection, \
SourceTreatmentFileFormSelection, TreatmentSourceFormSelection, \
TreatmentFileSourceFormSelection, DashboardForm as DashboardTreatmentForm, \
- DashboardTreatmentFileForm
+ DashboardTreatmentFileForm, TreatmentImagesFormset
__all__ = [
'TreatmentSelect', 'TreatmentFormSelection', 'BaseTreatmentForm',
@@ -81,7 +80,7 @@ __all__ = [
'TreatmentFileSourceFormSelection', 'DashboardTreatmentForm',
'DashboardTreatmentFileForm',
'RecordFormSelection', 'FindForm', 'DateForm', 'DatingFormSet',
- 'PreservationForm',
+ 'PreservationForm', 'ImagesFormset',
'FindSelect', 'FindFormSelection', 'FindFormSelectionWarehouseModule',
'MultipleFindFormSelection', 'MultipleFindFormSelectionWarehouseModule',
'FindMultipleFormSelection', 'check_form', 'check_exist', 'check_not_exist',
@@ -89,7 +88,9 @@ __all__ = [
'check_treatment', 'ResultFindForm', 'ResultFindFormSet',
'FindDeletionForm', 'UpstreamFindFormSelection', 'SourceFindFormSelection',
'FindSourceSelect', 'FindSourceFormSelection', 'NewFindBasketForm',
- 'SelectFindBasketForm', 'DeleteFindBasketForm', 'FindBasketAddItemForm']
+ 'SelectFindBasketForm', 'DeleteFindBasketForm', 'FindBasketAddItemForm',
+ 'TreatmentImagesFormset'
+]
logger = logging.getLogger(__name__)
@@ -194,9 +195,6 @@ class FindForm(CustomForm, ManageOldType):
communicabilitie = widgets.Select2MultipleField(
label=_(u"Communicability"), required=False
)
- image = forms.ImageField(
- label=_(u"Image"), help_text=mark_safe(get_image_help()),
- max_length=255, required=False, widget=widgets.ImageFileInput())
comment = forms.CharField(label=_(u"Comment"), required=False,
widget=forms.Textarea)
dating_comment = forms.CharField(
@@ -326,6 +324,14 @@ class FindForm(CustomForm, ManageOldType):
return self.cleaned_data
+ImagesFormset = formset_factory(BaseImageForm, can_delete=True,
+ formset=BaseImageFormset)
+ImagesFormset.file_upload = True
+ImagesFormset.form_label = _(u"Images")
+ImagesFormset.form_admin_name = _(u"Find - 025 - Images")
+ImagesFormset.form_slug = "find-025-images"
+
+
class PreservationForm(CustomForm, ManageOldType):
form_label = _("Preservation")
form_admin_name = _(u"Find - 030 - Preservation")
diff --git a/archaeological_finds/forms_treatments.py b/archaeological_finds/forms_treatments.py
index e4fa2def7..b5daf146f 100644
--- a/archaeological_finds/forms_treatments.py
+++ b/archaeological_finds/forms_treatments.py
@@ -22,9 +22,8 @@ import datetime
import logging
from django import forms
-from django.conf import settings
from django.core import validators
-from django.utils.safestring import mark_safe
+from django.forms.formsets import formset_factory
from django.utils.translation import ugettext_lazy as _
from ishtar_common.models import Person, valid_id, Organization, \
@@ -38,7 +37,8 @@ from archaeological_operations.forms import AdministrativeActOpeForm, \
from ishtar_common.forms import reverse_lazy, TableSelect, FinalForm, \
ManageOldType, get_form_selection, CustomForm, FieldType, IshtarForm
-from ishtar_common.forms_common import SourceSelect, get_image_help
+from ishtar_common.forms_common import SourceSelect, BaseImageForm, \
+ BaseImageFormset
from ishtar_common import widgets
from bootstrap_datepicker.widgets import DatePicker
@@ -152,9 +152,6 @@ class BaseTreatmentForm(CustomForm, ManageOldType):
required=False)
insurance_cost = forms.FloatField(label=_(u"Insurance cost ({currency})"),
required=False)
- image = forms.ImageField(
- label=_(u"Image"), help_text=mark_safe(get_image_help()),
- max_length=255, required=False, widget=widgets.ImageFileInput())
TYPES = [
FieldType('treatment_state', models.TreatmentState),
@@ -261,6 +258,14 @@ class TreatmentModifyForm(BaseTreatmentForm):
return cleaned_data
+TreatmentImagesFormset = formset_factory(BaseImageForm, can_delete=True,
+ formset=BaseImageFormset)
+TreatmentImagesFormset.file_upload = True
+TreatmentImagesFormset.form_label = _(u"Images")
+TreatmentImagesFormset.form_admin_name = _(u"Treatment - 025 - Images")
+TreatmentImagesFormset.form_slug = "treatment-025-images"
+
+
class TreatmentFormFileChoice(CustomForm, forms.Form):
form_label = _(u"Associated request")
form_admin_name = _(u"Treatment - 010 - Request choice")
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py
index 774b3c98b..7e53b514d 100644
--- a/archaeological_finds/models.py
+++ b/archaeological_finds/models.py
@@ -3,11 +3,12 @@ from archaeological_finds.models_finds import MaterialType, ConservatoryState,\
FindBasket, Find, FindSource, Property, CHECK_CHOICES, BatchType, \
BFBulkView, FBulkView, FirstBaseFindView, AlterationType, \
AlterationCauseType, TreatmentEmergencyType, TreatmentType, \
- CommunicabilityType, MaterialTypeQualityType, ObjectTypeQualityType
+ CommunicabilityType, MaterialTypeQualityType, ObjectTypeQualityType, \
+ FindImage
from archaeological_finds.models_treatments import Treatment, \
AbsFindTreatments, FindUpstreamTreatments, FindDownstreamTreatments, \
FindTreatments, TreatmentSource, TreatmentFile, TreatmentFileType, \
- TreatmentFileSource, TreatmentState
+ TreatmentFileSource, TreatmentState, TreatmentImage
__all__ = ['MaterialType', 'ConservatoryState',
'IntegrityType', 'RemarkabilityType', 'ObjectType',
@@ -19,4 +20,4 @@ __all__ = ['MaterialType', 'ConservatoryState',
'FindDownstreamTreatments', 'FindTreatments', 'TreatmentSource',
'TreatmentFile', 'TreatmentFileType', 'TreatmentFileSource',
'CommunicabilityType', 'MaterialTypeQualityType',
- 'ObjectTypeQualityType']
+ 'ObjectTypeQualityType', 'TreatmentImage', 'FindImage']
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 2b903e66a..c9bbc0713 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -1079,17 +1079,22 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, OwnPerms,
setattr(new, field.name, None)
new.order = self.order + 1
new.history_order = user
- new.image.name = self.image.name
- # force_copy is necessary to not regenerate a thumb and resize
- # again the image
- new.save(force_copy=True)
+ new.save()
# m2m fields
m2m = [field.name for field in model._meta.many_to_many
if field.name not in PRIVATE_FIELDS]
for field in m2m:
- for val in getattr(self, field).all():
- getattr(new, field).add(val)
+ if field == 'images':
+ for rel in FindImage.objects.filter(item__pk=self.pk).all():
+ FindImage.objects.create(
+ item=new,
+ image=rel.image,
+ is_main=rel.is_main
+ )
+ else:
+ for val in getattr(self, field).all():
+ getattr(new, field).add(val)
return new
@classmethod
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index a2b497c9a..99b2968f3 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -106,6 +106,7 @@ def autocomplete_treatmentfile(request):
for file in files])
return HttpResponse(data, content_type='text/plain')
+
show_findsource = show_item(models.FindSource, 'findsource')
get_findsource = get_item(models.FindSource, 'get_findsource', 'findsource')
@@ -133,6 +134,7 @@ def check_not_warehouse_module(self):
find_creation_steps = [
('selecrecord-find_creation', RecordFormSelectionTable),
('find-find_creation', FindForm),
+ ('images-find_creation', ImagesFormset),
('preservation-find_creation', PreservationForm),
('dating-find_creation', DatingFormSet),
('final-find_creation', FinalForm)
@@ -167,17 +169,23 @@ find_modification_condition_dict = {
'preservation-find_modification': check_preservation_module,
}
-find_modification_wizard = FindModificationWizard.as_view([
+find_modification_steps = [
('selec-find_modification', FindFormSelection),
('selecw-find_modification', FindFormSelectionWarehouseModule),
('selecrecord-find_modification', RecordFormSelection),
('find-find_modification', FindForm),
+ ('images-find_modification', ImagesFormset),
('preservation-find_modification', PreservationForm),
('dating-find_modification', DatingFormSet),
- ('final-find_modification', FinalForm)],
+ ('final-find_modification', FinalForm)
+]
+
+find_modification_wizard = FindModificationWizard.as_view(
+ find_modification_steps,
condition_dict=find_modification_condition_dict,
label=_(u"Find modification"),
- url_name='find_modification',)
+ url_name='find_modification'
+)
def find_modify(request, pk):
@@ -406,9 +414,12 @@ treatment_wizard_steps = [
('basetreatment-treatment_creation', BaseTreatmentForm),
('selecfind-treatment_creation', UpstreamFindFormSelection),
('selecbasket-treatment_creation', SelectFindBasketForm),
+ ('images-treatment_creation', TreatmentImagesFormset),
# ('resultfind-treatment_creation', ResultFindForm),
# ('resultfinds-treatment_creation', ResultFindFormSet),
- ('final-treatment_creation', FinalForm)]
+ ('final-treatment_creation', FinalForm)
+]
+
treatment_search_wizard = SearchWizard.as_view([
('general-treatment_search', TreatmentFormSelection)],
@@ -440,6 +451,7 @@ treatment_modification_wizard = TreatmentModificationWizard.as_view(
[('selec-treatment_modification', TreatmentFormSelection),
('file-treatment_modification', TreatmentFormFileChoice),
('basetreatment-treatment_modification', TreatmentModifyForm),
+ ('images-treatment_creation', TreatmentImagesFormset),
('final-treatment_modification', FinalForm)],
label=_(u"Treatment modification"),
url_name='treatment_modification',