summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_finds/forms.py53
-rw-r--r--archaeological_finds/models_finds.py8
-rw-r--r--archaeological_finds/urls.py10
-rw-r--r--archaeological_finds/views.py2
-rw-r--r--ishtar_common/forms_common.py62
-rw-r--r--ishtar_common/models.py7
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"
),