summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-02-13 13:23:29 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-02-13 13:23:29 +0100
commitbf6fa71e7f161896cd114a2033d7688f98d49f8e (patch)
treeaead69cdc27743add5535450c812c8ce9d440584
parent5330e9b9622107a17a170cc2d3761dafbf15b8ae (diff)
downloadIshtar-bf6fa71e7f161896cd114a2033d7688f98d49f8e.tar.bz2
Ishtar-bf6fa71e7f161896cd114a2033d7688f98d49f8e.zip
Manage search on json fields - HistorySelect for all concerned forms
-rw-r--r--archaeological_context_records/forms.py6
-rw-r--r--archaeological_context_records/views.py4
-rw-r--r--archaeological_files/forms.py6
-rw-r--r--archaeological_files/views.py4
-rw-r--r--archaeological_finds/forms.py4
-rw-r--r--archaeological_finds/forms_treatments.py12
-rw-r--r--archaeological_finds/views.py14
-rw-r--r--archaeological_operations/forms.py10
-rw-r--r--archaeological_operations/views.py8
-rw-r--r--archaeological_warehouse/forms.py10
-rw-r--r--archaeological_warehouse/views.py8
-rw-r--r--ishtar_common/forms.py10
-rw-r--r--ishtar_common/forms_common.py6
-rw-r--r--ishtar_common/views.py3
-rw-r--r--ishtar_common/views_item.py15
15 files changed, 88 insertions, 32 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index 54ae74202..ae25e0abe 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -33,7 +33,7 @@ from archaeological_context_records import models
from ishtar_common.forms import FinalForm, FormSet, \
reverse_lazy, get_form_selection, TableSelect, ManageOldType, CustomForm, \
- FieldType, CustomFormSearch, IshtarForm
+ FieldType, CustomFormSearch, IshtarForm, HistorySelect
from ishtar_common.forms_common import get_town_field
from archaeological_operations.forms import OperationSelect, ParcelField, \
RecordRelationsForm as OpeRecordRelationsForm, RecordRelationsFormSetBase
@@ -58,11 +58,11 @@ class OperationFormSelection(CustomForm, forms.Form):
validators=[valid_id(Operation)])
-class RecordSelect(CustomForm, TableSelect):
+class RecordSelect(HistorySelect):
_model = models.ContextRecord
-
form_admin_name = _(u"Context record - 001 - Search")
form_slug = "contextrecord-001-search"
+
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
'archaeological-context-records', 'contextrecord'
diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py
index 6a01a48f0..ae07c4037 100644
--- a/archaeological_context_records/views.py
+++ b/archaeological_context_records/views.py
@@ -78,7 +78,9 @@ def autocomplete_contextrecord(request):
get_contextrecord = get_item(
models.ContextRecord,
- 'get_contextrecord', 'contextrecord')
+ 'get_contextrecord', 'contextrecord',
+ search_form=forms.RecordSelect
+)
get_contextrecord_for_ope = get_item(
models.ContextRecord,
'get_contextrecord', 'contextrecord',
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py
index b8f41b4c4..40404e6f8 100644
--- a/archaeological_files/forms.py
+++ b/archaeological_files/forms.py
@@ -37,7 +37,7 @@ from archaeological_operations.models import ActType, AdministrativeAct, \
import models
from ishtar_common.forms import FinalForm, get_now, reverse_lazy, TableSelect, \
- ManageOldType, CustomForm, FieldType, IshtarForm
+ ManageOldType, CustomForm, FieldType, IshtarForm, HistorySelect
from ishtar_common.forms_common import get_town_field
from archaeological_operations.forms import AdministrativeActForm, \
AdministrativeActOpeFormSelection, SLICING, AdministrativeActModifForm, \
@@ -46,8 +46,10 @@ from ishtar_common import widgets
from bootstrap_datepicker.widgets import DatePicker
-class FileSelect(TableSelect):
+class FileSelect(HistorySelect):
_model = models.File
+ form_admin_name = _(u"File - 001 - Search")
+ form_slug = "file-001-search"
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
diff --git a/archaeological_files/views.py b/archaeological_files/views.py
index 9db2514af..c7a8830c8 100644
--- a/archaeological_files/views.py
+++ b/archaeological_files/views.py
@@ -75,7 +75,9 @@ def autocomplete_file(request):
for file in files])
return HttpResponse(data, content_type='text/plain')
-get_file = get_item(models.File, 'get_file', 'file')
+
+get_file = get_item(models.File, 'get_file', 'file',
+ search_form=FileSelect)
revert_file = revert_item(models.File)
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 44d1f742d..221eb4f82 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -834,6 +834,8 @@ DatingFormSet.form_slug = "find-040-dating"
class FindSelect(HistorySelect):
_model = models.Find
+ form_admin_name = _(u"Find - 001 - Search")
+ form_slug = "find-001-search"
FORM_FILTERS = [
(_(u"Find origin"), [
"base_finds__cache_short_id",
@@ -876,8 +878,6 @@ class FindSelect(HistorySelect):
)
]
- form_admin_name = _(u"Find - 001 - Search")
- form_slug = "find-001-search"
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
'archaeological-finds', 'find'
diff --git a/archaeological_finds/forms_treatments.py b/archaeological_finds/forms_treatments.py
index 5471cea23..203eb0209 100644
--- a/archaeological_finds/forms_treatments.py
+++ b/archaeological_finds/forms_treatments.py
@@ -33,7 +33,7 @@ from archaeological_warehouse.models import Warehouse, Container
from bootstrap_datepicker.widgets import DatePicker
from ishtar_common import widgets
from ishtar_common.forms import reverse_lazy, TableSelect, FinalForm, \
- ManageOldType, CustomForm, FieldType, IshtarForm
+ ManageOldType, CustomForm, FieldType, IshtarForm, HistorySelect
from ishtar_common.models import Person, valid_id, Organization, \
get_current_profile
@@ -42,8 +42,10 @@ logger = logging.getLogger(__name__)
# Treatment
-class TreatmentSelect(TableSelect):
+class TreatmentSelect(HistorySelect):
_model = models.Treatment
+ form_admin_name = _(u"Treatment - 001 - Search")
+ form_slug = "treatment-001-search"
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
@@ -614,7 +616,11 @@ class AdministrativeActTreatmentModifForm(
# treatment requests
-class TreatmentFileSelect(TableSelect):
+class TreatmentFileSelect(HistorySelect):
+ _model = models.TreatmentFile
+ form_admin_name = _(u"Treatment file - 001 - Search")
+ form_slug = "treatmentfile-001-search"
+
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
'archaeological-finds', 'treatmentfile'
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index fb5cdc11e..d4faff71a 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -47,7 +47,8 @@ from ishtar_common.views_item import display_item, get_item, show_item, \
from archaeological_operations.wizards import AdministrativeActDeletionWizard
from archaeological_finds import wizards
-get_find = get_item(models.Find, 'get_find', 'find')
+get_find = get_item(models.Find, 'get_find', 'find',
+ search_form=forms.FindSelect)
get_find_for_ope = get_item(models.Find, 'get_find', 'find',
own_table_cols=models.Find.TABLE_COLS_FOR_OPE)
@@ -61,7 +62,10 @@ autocomplete_find = get_autocomplete_item(model=models.Find)
show_treatment = show_item(models.Treatment, 'treatment')
revert_treatment = revert_item(models.Treatment)
-get_treatment = get_item(models.Treatment, 'get_treatment', 'treatment')
+get_treatment = get_item(
+ models.Treatment, 'get_treatment', 'treatment',
+ search_form=forms.TreatmentSelect
+)
display_treatment = display_item(models.Treatment)
autocomplete_treatment = get_autocomplete_item(model=models.Treatment)
@@ -73,8 +77,10 @@ get_administrativeacttreatment = get_item(
show_treatmentfile = show_item(models.TreatmentFile, 'treatmentfile')
revert_treatmentfile = revert_item(models.TreatmentFile)
-get_treatmentfile = get_item(models.TreatmentFile, 'get_treatmentfile',
- 'treatmentfile')
+get_treatmentfile = get_item(
+ models.TreatmentFile, 'get_treatmentfile', 'treatmentfile',
+ search_form=forms.TreatmentFileSelect
+)
get_administrativeacttreatmentfile = get_item(
AdministrativeAct, 'get_administrativeacttreatmentfile',
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index abb5de8a9..b093b383c 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -40,7 +40,7 @@ from bootstrap_datepicker.widgets import DateField
from ishtar_common import widgets
from ishtar_common.forms import FinalForm, FormSet, get_now, \
reverse_lazy, TableSelect, get_data_from_formset, \
- ManageOldType, IshtarForm, CustomForm, FieldType
+ ManageOldType, IshtarForm, CustomForm, FieldType, HistorySelect
from ishtar_common.forms_common import TownFormSet, get_town_field, TownForm
from ishtar_common.models import valid_id, Person, Town, \
DocumentTemplate, Organization, get_current_profile, \
@@ -471,8 +471,10 @@ RecordRelationsFormSet.form_admin_name = _(u"Operation - 080 - Relations")
RecordRelationsFormSet.form_slug = "operation-080-relations"
-class OperationSelect(TableSelect):
+class OperationSelect(HistorySelect):
_model = models.Operation
+ form_admin_name = _(u"Operation - 001 - Search")
+ form_slug = "operation-001-search"
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
@@ -1238,8 +1240,10 @@ class OperationDeletionForm(FinalForm):
#########
-class SiteSelect(TableSelect):
+class SiteSelect(HistorySelect):
_model = models.ArchaeologicalSite
+ form_admin_name = _(u"Archaeological site - 001 - Search")
+ form_slug = "archaeological_site-001-search"
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py
index 06b8b6ce9..5cf53fcbe 100644
--- a/archaeological_operations/views.py
+++ b/archaeological_operations/views.py
@@ -40,7 +40,7 @@ from archaeological_operations.forms import ArchaeologicalSiteForm, \
AdministrativeActOpeModifForm, FinalAdministrativeActDeleteForm, \
AdministrativeActRegisterFormSelection, DocumentGenerationAdminActForm, \
SiteForm, SiteTownFormset, SiteUnderwaterForm, check_underwater_module, \
- CourtOrderedSeizureForm
+ CourtOrderedSeizureForm, SiteSelect, OperationSelect
from archaeological_operations.wizards import has_associated_file, \
is_preventive, is_judiciary, OperationWizard, OperationModificationWizard, \
OperationClosingWizard, OperationDeletionWizard, SiteSearch, \
@@ -155,7 +155,8 @@ def get_available_operation_code(request, year=None):
return HttpResponse(data, content_type='text/plain')
-get_operation = get_item(models.Operation, 'get_operation', 'operation')
+get_operation = get_item(models.Operation, 'get_operation', 'operation',
+ search_form=OperationSelect)
show_operation = show_item(models.Operation, 'operation')
revert_operation = revert_item(models.Operation)
@@ -348,7 +349,8 @@ def site_extra_context(request, item):
return {'SITE_LABEL': IshtarSiteProfile.get_default_site_label()}
-get_site = get_item(models.ArchaeologicalSite, 'get_site', 'site')
+get_site = get_item(models.ArchaeologicalSite, 'get_site', 'site',
+ search_form=SiteSelect)
show_site = show_item(
models.ArchaeologicalSite, 'site',
extra_dct=site_extra_context
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py
index 9175a78d6..0ac3ddeae 100644
--- a/archaeological_warehouse/forms.py
+++ b/archaeological_warehouse/forms.py
@@ -33,7 +33,7 @@ from ishtar_common import widgets
from bootstrap_datepicker.widgets import DatePicker
from ishtar_common.forms import name_validator, reverse_lazy, \
get_form_selection, TableSelect, ManageOldType, FinalForm, FormSet, \
- CustomForm, FieldType
+ CustomForm, FieldType, HistorySelect
from ishtar_common.forms_common import get_image_help
from archaeological_finds.forms import FindMultipleFormSelection, \
SelectFindBasketForm
@@ -80,8 +80,10 @@ SelectedDivisionFormset.form_admin_name = _(u"Warehouse - 020 - Divisions")
SelectedDivisionFormset.form_slug = "warehouse-020-divisions"
-class WarehouseSelect(TableSelect):
+class WarehouseSelect(HistorySelect):
_model = models.Warehouse
+ form_admin_name = _(u"Warehouse - 001 - Search")
+ form_slug = "warehouse-001-search"
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
@@ -246,8 +248,10 @@ class ContainerModifyForm(ContainerForm):
return cleaned_data
-class ContainerSelect(TableSelect):
+class ContainerSelect(HistorySelect):
_model = models.Container
+ form_admin_name = _(u"Container - 001 - Search")
+ form_slug = "container-001-search"
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py
index 83fd7f4e1..42faafca0 100644
--- a/archaeological_warehouse/views.py
+++ b/archaeological_warehouse/views.py
@@ -31,7 +31,7 @@ from archaeological_warehouse.forms import WarehouseForm, ContainerForm, \
ContainerFormSelection, BasePackagingForm, WarehouseFormSelection, \
SelectedDivisionFormset, WarehouseDeletionForm, \
MainContainerFormSelection, ContainerModifyForm, LocalisationForm, \
- ContainerDeletionForm
+ ContainerDeletionForm, ContainerSelect, WarehouseSelect
from ishtar_common.forms import FinalForm
from ishtar_common.views_item import get_item, show_item, new_item
@@ -42,10 +42,12 @@ from archaeological_warehouse.wizards import PackagingWizard, WarehouseSearch, \
ContainerSearch, ContainerWizard, ContainerModificationWizard, \
ContainerDeletionWizard
-get_container = get_item(models.Container, 'get_container', 'container')
+get_container = get_item(models.Container, 'get_container', 'container',
+ search_form=ContainerSelect)
show_container = show_item(models.Container, 'container')
-get_warehouse = get_item(models.Warehouse, 'get_warehouse', 'warehouse')
+get_warehouse = get_item(models.Warehouse, 'get_warehouse', 'warehouse',
+ search_form=WarehouseSelect)
show_warehouse = show_item(models.Warehouse, 'warehouse')
new_warehouse = new_item(models.Warehouse, WarehouseForm)
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 754f63f74..d697ee89b 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -273,6 +273,11 @@ class CustomForm(BSForm):
@classmethod
def _get_json_fields(cls, custom_form):
+ """
+ Return json field list from database configuration
+ :param custom_form: form concerned
+ :return: ((order1, key1, field1), ...)
+ """
fields = []
for field in custom_form.json_fields.order_by('order').all():
key = "data__" + field.json_field.key
@@ -299,6 +304,11 @@ class CustomForm(BSForm):
@classmethod
def check_custom_form(cls, current_user):
+ """
+ Check form customization
+ :param current_user:
+ :return: available, excluded_fields, json_fields
+ """
if not current_user:
return True, [], []
base_q = {"form": cls.form_slug, 'available': True}
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index fadda7593..eb15445a4 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -44,7 +44,7 @@ from ishtar_common.templatetags.link_to_window import simple_link_to_window
from forms import FinalForm, FormSet, reverse_lazy, name_validator, \
TableSelect, ManageOldType, CustomForm, FieldType, FormHeader, \
FormSetWithDeleteSwitches, IshtarForm, get_data_from_formset, \
- file_size_validator
+ file_size_validator, HistorySelect
from ishtar_common.utils import is_downloadable, clean_session_cache, \
max_size_help
@@ -1228,8 +1228,10 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType):
return item
-class DocumentSelect(TableSelect):
+class DocumentSelect(HistorySelect):
_model = models.Document
+ form_admin_name = _(u"Document - 001 - Search")
+ form_slug = "document-001-search"
search_vector = forms.CharField(
label=_(u"Full text search"), widget=widgets.SearchWidget(
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 5050f2d0d..61bae69e2 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -1679,7 +1679,8 @@ class OrganizationPersonEdit(LoginRequiredMixin, UpdateView):
# documents
show_document = show_item(models.Document, 'document')
-get_document = get_item(models.Document, 'get_document', 'document')
+get_document = get_item(models.Document, 'get_document', 'document',
+ search_form=forms.DocumentSelect)
display_document = display_item(models.Document)
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 1a0824c3b..65f06d2f1 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -1000,7 +1000,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
relative_session_names=None, specific_perms=None,
own_table_cols=None, relation_types_prefix=None,
do_not_deduplicate=False, model_for_perms=None,
- alt_query_own=None):
+ alt_query_own=None, search_form=None):
"""
Generic treatment of tables
@@ -1022,6 +1022,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
instance for record_relations view).
:param model_for_perms: use another model to check permission
:param alt_query_own: name of alternate method to get query_own
+ :param search_form: associated search form to manage JSON query keys
:return:
"""
def func(request, data_type='json', full=False, force_own=False,
@@ -1140,6 +1141,18 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
for field in associated_fields]))
request_keys.update(my_extra_request_keys)
+ # manage search on json fields and excluded fields
+ if search_form and request.user and getattr(
+ request.user, 'ishtaruser', None):
+ available, excluded_fields, json_fields = \
+ search_form.check_custom_form(request.user.ishtaruser)
+ # for now no manage on excluded_fields: should we prevent search on
+ # some fields regarding the user concerned?
+ if available:
+ for __, jkey, jfield in json_fields:
+ if jfield.alt_name not in request_keys:
+ request_keys[jfield.alt_name] = jkey + "__iexact"
+
if "query" in dct:
request_items = dct["query"]
request_items["submited"] = True