diff options
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 |
commit | 32b9575cefa9eede2be68ea8464a7c70d52e4105 (patch) | |
tree | df7cf20de56e13c9660d14219d7ee5d825bb2909 /archaeological_operations | |
parent | 5bbafc5b1a398afa4cd37acf20293eddb8c12f9b (diff) | |
download | Ishtar-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.py | 43 | ||||
-rw-r--r-- | archaeological_operations/ishtar_menu.py | 96 | ||||
-rw-r--r-- | archaeological_operations/models.py | 5 | ||||
-rw-r--r-- | archaeological_operations/urls.py | 8 | ||||
-rw-r--r-- | archaeological_operations/views.py | 12 | ||||
-rw-r--r-- | archaeological_operations/wizards.py | 18 |
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': |