summaryrefslogtreecommitdiff
path: root/archaeological_operations
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-02-14 12:39:03 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-02-15 17:20:19 +0100
commit32b9575cefa9eede2be68ea8464a7c70d52e4105 (patch)
treedf7cf20de56e13c9660d14219d7ee5d825bb2909 /archaeological_operations
parent5bbafc5b1a398afa4cd37acf20293eddb8c12f9b (diff)
downloadIshtar-32b9575cefa9eede2be68ea8464a7c70d52e4105.tar.bz2
Ishtar-32b9575cefa9eede2be68ea8464a7c70d52e4105.zip
Archaeological site: search view (refs #3913)
- add site to profile - allow alternate label in menus for sites - add entry in menu - basic configuration of site model
Diffstat (limited to 'archaeological_operations')
-rw-r--r--archaeological_operations/forms.py43
-rw-r--r--archaeological_operations/ishtar_menu.py96
-rw-r--r--archaeological_operations/models.py5
-rw-r--r--archaeological_operations/urls.py8
-rw-r--r--archaeological_operations/views.py12
-rw-r--r--archaeological_operations/wizards.py18
6 files changed, 176 insertions, 6 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index 4f5ac0435..38efb269f 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -1245,6 +1245,49 @@ class OperationDeletionForm(FinalForm):
confirm_msg = " "
confirm_end_msg = _(u"Would you like to delete this operation?")
+#########
+# Sites #
+#########
+
+
+class SiteSelect(TableSelect):
+ search_vector = forms.CharField(label=_(u"Full text search"))
+ reference = forms.CharField(label=_(u"Reference"), max_length=200,
+ required=False)
+ name = forms.CharField(label=_(u"Name"), max_length=200, required=False)
+ periods = forms.ChoiceField(label=_(u"Periods"), choices=[], required=False)
+ remains = forms.ChoiceField(label=_(u"Remains"), choices=[], required=False)
+ TYPES = [
+ FieldType('periods', models.Period),
+ FieldType('remains', models.RemainType),
+ ]
+
+
+class SiteFormSelection(IshtarForm):
+ SEARCH_AND_SELECT = True
+ associated_models = {'pk': models.ArchaeologicalSite}
+ currents = {'pk': models.ArchaeologicalSite}
+ pk = forms.IntegerField(
+ label="", required=False,
+ widget=widgets.DataTable(
+ reverse_lazy('get-site'), SiteSelect,
+ models.ArchaeologicalSite,
+ source_full=reverse_lazy('get-site-full')),
+ validators=[valid_id(models.Operation)])
+
+ @classmethod
+ def form_label(cls):
+ return unicode(_(u"{} search")).format(
+ get_current_profile().get_site_label()
+ )
+
+ def clean(self):
+ cleaned_data = self.cleaned_data
+ if 'pk' not in cleaned_data or not cleaned_data['pk']:
+ raise forms.ValidationError(_(u"You should select an item."))
+ return cleaned_data
+
+
####################################
# Source management for operations #
####################################
diff --git a/archaeological_operations/ishtar_menu.py b/archaeological_operations/ishtar_menu.py
index 4ad0c58a3..5c2cca383 100644
--- a/archaeological_operations/ishtar_menu.py
+++ b/archaeological_operations/ishtar_menu.py
@@ -21,11 +21,103 @@ from django.utils.translation import ugettext_lazy as _, pgettext_lazy
from ishtar_common.menu_base import SectionItem, MenuItem
-import models
+from ishtar_common.models import IshtarSiteProfile
+from archaeological_operations import models
-# be carreful: each access_controls must be relevant with check_rights in urls
+# be careful: each access_controls must be relevant with check_rights in urls
+
+"""
+MenuItem(
+ 'operation_creation', _(u"Creation"),
+ model=models.Operation,
+ access_controls=['add_operation',
+ 'add_own_operation']),
+MenuItem(
+ 'operation_modification', _(u"Modification"),
+ model=models.Operation,
+ access_controls=['change_operation',
+ 'change_own_operation']),
+MenuItem(
+ 'operation_closing', _(u"Closing"),
+ model=models.Operation,
+ access_controls=['close_operation']),
+MenuItem(
+ 'operation_deletion', _(u"Deletion"),
+ model=models.Operation,
+ access_controls=['change_operation',
+ 'change_own_operation']),
+SectionItem(
+ 'admin_act_operations',
+ _(u"Administrative act"),
+ profile_restriction='files',
+ childs=[
+ MenuItem(
+ 'operation_administrativeactop_search',
+ _(u"Search"),
+ model=models.AdministrativeAct,
+ access_controls=[
+ 'change_administrativeact']),
+ MenuItem(
+ 'operation_administrativeactop',
+ _(u"Creation"),
+ model=models.AdministrativeAct,
+ access_controls=['change_administrativeact']),
+ MenuItem(
+ 'operation_administrativeactop_modification',
+ _(u"Modification"),
+ model=models.AdministrativeAct,
+ access_controls=['change_administrativeact']),
+ MenuItem(
+ 'operation_administrativeactop_deletion',
+ _(u"Deletion"),
+ model=models.AdministrativeAct,
+ access_controls=['change_administrativeact']),
+ MenuItem(
+ 'operation_administrativeact_document',
+ _(u"Documents"),
+ model=models.AdministrativeAct,
+ access_controls=['change_administrativeact']),
+ ],),
+SectionItem(
+ 'operation_source', _(u"Documentation"),
+ childs=[
+ MenuItem('operation_source_search',
+ _(u"Search"),
+ model=models.OperationSource,
+ access_controls=['view_operation',
+ 'view_own_operation']),
+ MenuItem('operation_source_creation',
+ _(u"Creation"),
+ model=models.OperationSource,
+ access_controls=['change_operation',
+ 'change_own_operation']),
+ MenuItem('operation_source_modification',
+ _(u"Modification"),
+ model=models.OperationSource,
+ access_controls=['change_operation',
+ 'change_own_operation']),
+ MenuItem('operation_source_deletion',
+ _(u"Deletion"),
+ model=models.OperationSource,
+ access_controls=['change_operation',
+ 'change_own_operation']),
+ ])
+
+"""
MENU_SECTIONS = [
+ (25, SectionItem(
+ 'site_management', IshtarSiteProfile.get_default_site_label,
+ css='menu-site',
+ profile_restriction='archaeological_site',
+ childs=[
+ MenuItem(
+ 'site_search', _(u"Search"),
+ model=models.ArchaeologicalSite,
+ access_controls=['view_archaeologicalsite',
+ 'view_own_archaeologicalsite']),
+ ]),
+ ),
(30, SectionItem(
'operation_management', _(u"Operation"),
css='menu-operation',
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index 06d9b5af0..899ff0707 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -89,6 +89,11 @@ post_delete.connect(post_save_cache, sender=ReportState)
class ArchaeologicalSite(BaseHistorizedItem):
+ SHOW_URL = 'show-site'
+ TABLE_COLS = ['reference', 'name', 'periods', 'remains']
+ SLUG = 'site'
+ BASE_SEARCH_VECTORS = ["reference", "name"]
+ M2M_SEARCH_VECTORS = ["periods__name", "remains__name"]
reference = models.CharField(_(u"Reference"), max_length=20, unique=True)
name = models.CharField(_(u"Name"), max_length=200,
null=True, blank=True)
diff --git a/archaeological_operations/urls.py b/archaeological_operations/urls.py
index 08687ae14..00880e303 100644
--- a/archaeological_operations/urls.py
+++ b/archaeological_operations/urls.py
@@ -152,6 +152,14 @@ urlpatterns = [
url(r'new-archaeologicalsite/(?:(?P<parent_name>[^/]+)/)?'
r'(?:(?P<limits>[^/]+)/)?$',
views.new_archaeologicalsite, name='new-archaeologicalsite'),
+ url(r'get-site/(?P<type>.+)?$',
+ views.get_site, name='get-site'),
+ url(r'get-site-full/(?P<type>.+)?$',
+ views.get_site, name='get-site-full', kwargs={'full': True}),
+ url(r'site_search/(?P<step>.+)?$',
+ check_rights(['view_archaeologicalsite',
+ 'view_own_archaeologicalsite'])(
+ views.site_search_wizard), name='site_search'),
url(r'autocomplete-patriarche/$', views.autocomplete_patriarche,
name='autocomplete-patriarche'),
url(r'operation_administrativeact_document/$',
diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py
index a4cb1f673..d20c14dfa 100644
--- a/archaeological_operations/views.py
+++ b/archaeological_operations/views.py
@@ -307,6 +307,18 @@ operation_deletion_wizard = OperationDeletionWizard.as_view(
label=_(u"Operation deletion"),
url_name='operation_deletion',)
+
+# archaeological sites
+
+get_site = get_item(models.ArchaeologicalSite, 'get_site', 'site')
+
+site_search_wizard = SiteSearch.as_view(
+ [('general-site_search', SiteFormSelection)],
+ label=_(u"{} search"),
+ url_name='site_search',)
+
+# operation sources
+
operation_source_search_wizard = SearchWizard.as_view([
('selec-operation_source_search', OperationSourceFormSelection)],
label=_(u"Operation: source search"),
diff --git a/archaeological_operations/wizards.py b/archaeological_operations/wizards.py
index 24c1af45b..01c9cbc2e 100644
--- a/archaeological_operations/wizards.py
+++ b/archaeological_operations/wizards.py
@@ -27,13 +27,16 @@ from django.http import Http404
from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _
+from ishtar_common.models import get_current_profile
+from archaeological_files.models import File
+from archaeological_operations import models
+
from ishtar_common.forms import reverse_lazy
-from ishtar_common.wizards import Wizard, ClosingWizard, DeletionWizard, \
- SourceWizard
-import models
from forms import GenerateDocForm
-from archaeological_files.models import File
+from ishtar_common.wizards import Wizard, ClosingWizard, DeletionWizard, \
+ SourceWizard, SearchWizard
+
logger = logging.getLogger(__name__)
@@ -445,6 +448,13 @@ class OperationEditAdministrativeActWizard(OperationAdministrativeActWizard):
return self.get_current_object().operation
+class SiteSearch(SearchWizard):
+ def get_label(self):
+ return unicode(_(u"Search {}")).format(
+ get_current_profile().get_site_label()
+ )
+
+
class AdministrativeActDeletionWizard(ClosingWizard):
wizard_templates = {
'final-operation_administrativeactop_deletion':