diff options
Diffstat (limited to 'archaeological_finds')
-rw-r--r-- | archaeological_finds/forms.py | 22 | ||||
-rw-r--r-- | archaeological_finds/forms_treatments.py | 17 | ||||
-rw-r--r-- | archaeological_finds/models.py | 7 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 17 | ||||
-rw-r--r-- | archaeological_finds/views.py | 20 |
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', |