diff options
-rw-r--r-- | archaeological_finds/forms.py | 53 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 8 | ||||
-rw-r--r-- | archaeological_finds/urls.py | 10 | ||||
-rw-r--r-- | archaeological_finds/views.py | 2 | ||||
-rw-r--r-- | ishtar_common/forms_common.py | 62 | ||||
-rw-r--r-- | ishtar_common/models.py | 7 |
6 files changed, 139 insertions, 3 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 460e34375..381541614 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -216,12 +216,16 @@ class BasicFindForm(CustomForm, ManageOldType): "communicabilitie", "cultural_attribution", "functional_area", + "technical_area", + "technical_processe", ] associated_models = { "material_type": models.MaterialType, "cultural_attribution": CulturalAttributionType, "object_type": models.ObjectType, "functional_area": models.FunctionalArea, + "technical_area": models.TechnicalAreaType, + "technical_processe": models.TechnicalProcessType, "communicabilitie": models.CommunicabilityType, "material_type_quality": models.MaterialTypeQualityType, "object_type_quality": models.ObjectTypeQualityType, @@ -241,12 +245,15 @@ class BasicFindForm(CustomForm, ManageOldType): "is_complete", "material_type", "material_type_quality", + "technical_processe", "material_comment", "object_type", "object_type_quality", "functional_area", + "technical_area", "find_number", "min_number_of_individuals", + "quantity_comment", "decoration", "inscription", "manufacturing_place", @@ -302,6 +309,10 @@ class BasicFindForm(CustomForm, ManageOldType): material_type_quality = forms.ChoiceField( label=_("Material type quality"), required=False, choices=[] ) + technical_processe = widgets.Select2MultipleField( + label=_("Technical processes"), + required=False, + ) material_comment = forms.CharField( label=_("Comment on the material"), required=False, widget=forms.Textarea ) @@ -316,10 +327,17 @@ class BasicFindForm(CustomForm, ManageOldType): label=_("Functional areas"), required=False, ) + technical_area = widgets.Select2MultipleField( + label=_("Technical areas"), + required=False, + ) find_number = forms.IntegerField(label=_("Number of remains"), required=False) min_number_of_individuals = forms.IntegerField( label=_("Minimum number of individuals (MNI)"), required=False ) + quantity_comment = forms.CharField( + label=_("Comment on quantity"), required=False, widget=forms.Textarea + ) decoration = forms.CharField( label=_("Decoration"), widget=forms.Textarea, required=False @@ -409,6 +427,8 @@ class BasicFindForm(CustomForm, ManageOldType): ), FieldType("object_type_quality", models.ObjectTypeQualityType), FieldType("functional_area", models.FunctionalArea, is_multiple=True), + FieldType("technical_area", models.TechnicalAreaType, is_multiple=True), + FieldType("technical_processe", models.TechnicalProcessType, is_multiple=True), FieldType("communicabilitie", models.CommunicabilityType, is_multiple=True), FieldType("checked_type", models.CheckedType, is_multiple=True), ] @@ -463,12 +483,15 @@ class FindForm(BasicFindForm): "is_complete", "material_type", "material_type_quality", + "technical_processe", "material_comment", "object_type", "object_type_quality", "functional_area", + "technical_area", "find_number", "min_number_of_individuals", + "quantity_comment", "inscription", "decoration", "manufacturing_place", @@ -569,6 +592,9 @@ class ResultingFindForm(CustomForm, ManageOldType): resulting_min_number_of_individuals = forms.IntegerField( label=_("Minimum number of individuals (MNI)"), required=False ) + resulting_quantity_comment = forms.CharField( + label=_("Comment on quantity"), required=False, widget=forms.Textarea + ) resulting_decoration = forms.CharField( label=_("Decoration"), widget=forms.Textarea, required=False @@ -688,8 +714,10 @@ class QAFindFormMulti(QAForm): ] associated_models = { "qa_material_types": models.MaterialType, + "qa_technical_processes": models.TechnicalProcessType, "qa_object_types": models.ObjectType, "qa_functional_areas": models.FunctionalArea, + "qa_technical_areas": models.TechnicalAreaType, "qa_communicabilities": models.CommunicabilityType, "qa_alterations": models.AlterationType, "qa_alteration_causes": models.AlterationCauseType, @@ -766,6 +794,10 @@ class QAFindFormMulti(QAForm): qa_material_types = widgets.Select2MultipleField( label=_("Material types"), required=False ) + qa_technical_processes = widgets.Select2MultipleField( + label=_("Technical processes"), + required=False, + ) qa_object_types = widgets.Select2MultipleField( label=_("Object types"), required=False, @@ -774,6 +806,10 @@ class QAFindFormMulti(QAForm): label=_("Functional areas"), required=False, ) + qa_technical_areas = widgets.Select2MultipleField( + label=_("Technical areas"), + required=False, + ) qa_manufacturing_place = forms.CharField( label=_("Manufacturing place"), required=False ) @@ -821,6 +857,8 @@ class QAFindFormMulti(QAForm): FieldType("qa_material_types", models.MaterialType, is_multiple=True), FieldType("qa_object_types", models.ObjectType, is_multiple=True), FieldType("qa_functional_areas", models.FunctionalArea, is_multiple=True), + FieldType("qa_technical_areas", models.TechnicalAreaType, is_multiple=True), + FieldType("qa_technical_processes", models.TechnicalProcessType, is_multiple=True), FieldType("qa_communicabilities", models.CommunicabilityType, is_multiple=True), FieldType("qa_alterations", models.AlterationType, is_multiple=True), FieldType("qa_alteration_causes", models.AlterationCauseType, is_multiple=True), @@ -1385,6 +1423,13 @@ class FindSelect(GeoItemSelect, PeriodSelect): material_type_quality = forms.ChoiceField( label=_("Material type quality"), choices=[] ) + technical_processes = forms.IntegerField( + label=_("Technical processes"), + widget=widgets.JQueryAutoComplete( + reverse_lazy("autocomplete-technicalprocess"), + associated_model=models.TechnicalProcessType, + ), + ) material_comment = forms.CharField(label=_("Comment on the material")) object_types = forms.IntegerField( label=_("Object type"), @@ -1400,7 +1445,13 @@ class FindSelect(GeoItemSelect, PeriodSelect): associated_model=models.FunctionalArea, ), ) - + technical_areas = forms.IntegerField( + label=_("Technical areas"), + widget=widgets.JQueryAutoComplete( + reverse_lazy("autocomplete-technicalarea"), + associated_model=models.TechnicalAreaType, + ), + ) find_number = forms.IntegerField(label=_("Number of remains")) min_number_of_individuals = forms.IntegerField( label=_("Minimum number of individuals (MNI)") diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 6c086ea93..0df6cdf75 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -1615,6 +1615,14 @@ class Find( pgettext_lazy("key for text search", "functional-area"), "functional_areas__label__iexact", ), + "technical_areas": SearchAltName( + pgettext_lazy("key for text search", "technical-area"), + "technical_areas__label__iexact", + ), + "technical_processes": SearchAltName( + pgettext_lazy("key for text search", "technical-process"), + "technical_processes__label__iexact", + ), "base_finds__context_record__operation__address": SearchAltName( pgettext_lazy("key for text search", "operation-address"), "base_finds__context_record__operation__address__iexact", diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py index 06cc504ec..a1b240363 100644 --- a/archaeological_finds/urls.py +++ b/archaeological_finds/urls.py @@ -432,6 +432,16 @@ urlpatterns = [ name="autocomplete-functionalarea", ), url( + r"autocomplete-technicalarea/$", + views.autocomplete_technicalarea, + name="autocomplete-technicalarea", + ), + url( + r"autocomplete-technicalprocess/$", + views.autocomplete_technicalprocess, + name="autocomplete-technicalprocess", + ), + url( r"autocomplete-materialtype/$", views.autocomplete_materialtype, name="autocomplete-materialtype", diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index bf8d0dfcb..e6ab574c9 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -478,6 +478,8 @@ autocomplete_materialtype = get_autocomplete_generic(models.MaterialType) autocomplete_treatmenttype = get_autocomplete_generic(models.TreatmentType) autocomplete_integritytype = get_autocomplete_generic(models.IntegrityType) autocomplete_functionalarea = get_autocomplete_generic(models.FunctionalArea) +autocomplete_technicalarea = get_autocomplete_generic(models.TechnicalAreaType) +autocomplete_technicalprocess = get_autocomplete_generic(models.TechnicalProcessType) class NewFindBasketView(IshtarMixin, LoginRequiredMixin, CreateView): diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index e2597175b..872571aad 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -1915,7 +1915,9 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): "source_type": models.SourceType, "support_type": models.SupportType, "publisher": models.Organization, + "rights_owner": models.Organization, "format_type": models.Format, + "shooting_angle": models.ShootingAngle, } pk = forms.IntegerField(label="", required=False, widget=forms.HiddenInput) @@ -1934,6 +1936,9 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): model=models.Format, label=_("Format"), choices=[], required=False ) scale = forms.CharField(label=_("Scale"), max_length=30, required=False) + shooting_angle = widgets.ModelChoiceField( + model=models.ShootingAngle, label=_("Shooting angle"), choices=[], required=False + ) container_id = forms.IntegerField( label=_("Current container"), widget=widgets.JQueryAutoComplete( @@ -1988,6 +1993,19 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): licenses = widgets.Select2MultipleField( label=_("Rights of use / licenses"), required=False, model=models.LicenseType ) + rights_owner = forms.IntegerField( + label=_("Rights owner"), + widget=widgets.JQueryAutoComplete( + reverse_lazy("autocomplete-organization"), + associated_model=models.Organization, + new=True, + ), + validators=[models.valid_id(models.Organization)], + required=False, + ) + copyright = forms.CharField( + label=_("Copyright"), widget=forms.Textarea, required=False + ) tags = widgets.Select2MultipleField( label=_("Tags"), required=False, @@ -2076,6 +2094,7 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): TYPES = [ FieldType("source_type", models.SourceType), FieldType("support_type", models.SupportType), + FieldType("shooting_angle", models.ShootingAngle), FieldType("format_type", models.Format), FieldType("language", models.Language), FieldType("licences", models.LicenseType, is_multiple=True), @@ -2092,6 +2111,7 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): "format_type", "support_type", "scale", + "shooting_angle", "image", "associated_file", "associated_url", @@ -2102,10 +2122,12 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): "creation_date", "publisher", "publishing_year", - "language", "isbn", "issn", "licenses", + "rights_owner", + "copyright", + "language", "source", "source_free_input", "source_page_range", @@ -2133,6 +2155,7 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): # field name, permission, options ("tags", ("ishtar_common.add_documenttag",), {"new": True}), ("authors", ("ishtar_common.add_author",), {"new": True}), + ("rights_owner", ("ishtar_common.add_organization",), {"new": True}), ("publisher", ("ishtar_common.add_organization",), {"new": True}), ("container", ("archaeological_warehouse.add_container",), {"new": True}), ("container_ref", ("archaeological_warehouse.add_container",), {"new": True}), @@ -2281,6 +2304,14 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): except models.Organization.DoesNotExist: return + def clean_rights_owner(self): + if not self.cleaned_data.get("rights_owner", None): + return + try: + return models.Organization.objects.get(pk=self.cleaned_data["rights_owner"]) + except models.Organization.DoesNotExist: + return + def save(self, commit=True): if not self.cleaned_data.get("authors", None): self.cleaned_data["authors"] = [] @@ -2368,6 +2399,15 @@ class DocumentSelect(HistorySelect): isbn = forms.CharField(label=_("ISBN")) issn = forms.CharField(label=_("ISSN")) licenses = forms.ChoiceField(label=_("Rights of use / licenses"), choices=[]) + rights_owner = forms.IntegerField( + label=_("Rights owner"), + widget=widgets.JQueryAutoComplete( + reverse_lazy("autocomplete-organization"), + associated_model=models.Organization, + ), + validators=[models.valid_id(models.Organization)], + ) + copyright = forms.CharField(label=_("Copyright")) comment = forms.CharField(label=_("Comment")) additional_information = forms.CharField(label=_("Additional informations")) @@ -2521,17 +2561,22 @@ class DocumentFormMultiSelection(LockForm, MultiSearchForm): class QADocumentFormMulti(QAForm): form_admin_name = _("Document - Quick action - Modify") form_slug = "document-quickaction-modify" - base_models = ["qa_source_type"] + base_models = ["qa_source_type", "qa_rights_owner"] associated_models = { "qa_source_type": models.SourceType, "qa_authors": models.Author, "qa_tags": models.DocumentTag, + "qa_rights_owner": models.Organization, + "qa_licenses": models.LicenseType, } MULTI = True REPLACE_FIELDS = [ "qa_source_type", "qa_creation_date", + "qa_rights_owner", + "qa_licenses", + "qa_copyright", ] qa_source_type = forms.ChoiceField(label=_("Source type"), required=False) qa_authors = widgets.ModelJQueryAutocompleteField( @@ -2544,11 +2589,17 @@ class QADocumentFormMulti(QAForm): qa_support_type = forms.ChoiceField(label=_("Medium"), choices=[], required=False) qa_scale = forms.CharField(label=_("Scale"), max_length=30, required=False) qa_tags = forms.ChoiceField(label=_("Tags"), choices=[], required=False) + qa_licenses = forms.ChoiceField(label=_("Rights of use / licenses"), choices=[], required=False) + qa_rights_owner = widgets.ModelJQueryAutocompleteField( + model=models.Organization, label=_("Rights owner"), new=True, required=False + ) + qa_copyright = forms.CharField(label=_("Copyright"), required=False) TYPES = [ FieldType("qa_source_type", models.SourceType), FieldType("qa_format_type", models.Format), FieldType("qa_support_type", models.SupportType), + FieldType("qa_licenses", models.LicenseType), FieldType("qa_tags", models.DocumentTag), ] @@ -2559,6 +2610,13 @@ class QADocumentFormMulti(QAForm): return "" return value + def _get_qa_rights_owner(self, value): + try: + value = models.Organization.objects.get(pk=value).cached_label + except models.Organization.DoesNotExist: + return "" + return value + class QADocumentDuplicateForm(IshtarForm): qa_title = forms.CharField(label=_("Title"), max_length=500, required=False) diff --git a/ishtar_common/models.py b/ishtar_common/models.py index bd457e970..aa7fda851 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -4210,6 +4210,13 @@ class Document( pgettext_lazy("key for text search", "license"), "licenses__label__iexact", ), + "rights_owner": SearchAltName( + pgettext_lazy("key for text search", "rights-owner"), + "rights_owner__name__iexact", + ), + "copyright": SearchAltName( + pgettext_lazy("key for text search", "copyright"), "copyright__iexact" + ), "scale": SearchAltName( pgettext_lazy("key for text search", "scale"), "scale__iexact" ), |