diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-06-29 13:27:09 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-06-29 13:27:09 +0200 |
commit | 6163889aae5f0724e4ad16cc91eee9c8cb15bb00 (patch) | |
tree | 7c483f9b207ccfa5b5391731f5ff5f03693fb42a /ishtar | |
parent | 95773b4ccd0beaa31f76c93a7c9b5e24211401dc (diff) | |
download | Ishtar-6163889aae5f0724e4ad16cc91eee9c8cb15bb00.tar.bz2 Ishtar-6163889aae5f0724e4ad16cc91eee9c8cb15bb00.zip |
Sources modification and deletion for Operations (refs #497)
Diffstat (limited to 'ishtar')
-rw-r--r-- | ishtar/ishtar_base/forms_common.py | 30 | ||||
-rw-r--r-- | ishtar/ishtar_base/forms_context_records.py | 2 | ||||
-rw-r--r-- | ishtar/ishtar_base/forms_operations.py | 63 | ||||
-rw-r--r-- | ishtar/ishtar_base/menus.py | 19 | ||||
-rw-r--r-- | ishtar/ishtar_base/models.py | 7 | ||||
-rw-r--r-- | ishtar/ishtar_base/urls.py | 91 | ||||
-rw-r--r-- | ishtar/ishtar_base/views.py | 6 |
7 files changed, 162 insertions, 56 deletions
diff --git a/ishtar/ishtar_base/forms_common.py b/ishtar/ishtar_base/forms_common.py index aff263a3b..dae692b05 100644 --- a/ishtar/ishtar_base/forms_common.py +++ b/ishtar/ishtar_base/forms_common.py @@ -40,7 +40,7 @@ import models import widgets from forms import Wizard, FinalForm, FormSet, reverse_lazy, name_validator -def get_town_field(required=True): +def get_town_field(label=_(u"Town"), required=True): help_text = _(u"<p>Type name, department code and/or postal code of the " u"town you would like to select. The search is insensitive to case.</p>\n" u"<p>Only the first twenty results are displayed but specifying the " @@ -51,7 +51,7 @@ def get_town_field(required=True): return forms.IntegerField( widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \ 'autocomplete-town', associated_model=models.Town), - validators=[models.valid_id(models.Town)], label=_(u"Town"), + validators=[models.valid_id(models.Town)], label=label, help_text=mark_safe(help_text), required=required) class WarehouseForm(forms.Form): @@ -401,7 +401,9 @@ ParcelFormSet = formset_factory(ParcelForm, can_delete=True, formset=ParcelFormSet) ParcelFormSet.form_label = _(u"Parcels") -# sources management +###################### +# Sources management # +###################### class SourceWizard(Wizard): model = None @@ -423,6 +425,28 @@ class SourceForm(forms.Form): super(SourceForm, self).__init__(*args, **kwargs) self.fields['source_type'].choices = models.SourceType.get_types() +class SourceSelect(forms.Form): + authors = forms.IntegerField( + widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \ + 'autocomplete-author', associated_model=models.Author), + validators=[models.valid_id(models.Author)], label=_(u"Author"), + required=False) + + source_type = forms.ChoiceField(label=_("Source type"), choices=[]) + + def __init__(self, *args, **kwargs): + super(SourceSelect, self).__init__(*args, **kwargs) + self.fields['source_type'].choices = models.SourceType.get_types() + self.fields['source_type'].help_text = models.SourceType.get_help() + +class SourceDeletionForm(FinalForm): + confirm_msg = " " + confirm_end_msg = _(u"Would you like to delete this documentation?") + +###################### +# Authors management # +###################### + class AuthorForm(forms.Form): form_label = _(u"Author") associated_models = {'person':models.Person, diff --git a/ishtar/ishtar_base/forms_context_records.py b/ishtar/ishtar_base/forms_context_records.py index a46d67995..07990ee43 100644 --- a/ishtar/ishtar_base/forms_context_records.py +++ b/ishtar/ishtar_base/forms_context_records.py @@ -35,7 +35,7 @@ import models import widgets from forms import Wizard, FinalForm, FormSet, SearchWizard, DeletionWizard, \ formset_factory, get_now, reverse_lazy -from forms_common import get_town_field +from forms_common import get_town_field, SourceForm, SourceWizard from forms_operations import OperationFormSelection class RecordWizard(Wizard): diff --git a/ishtar/ishtar_base/forms_operations.py b/ishtar/ishtar_base/forms_operations.py index ffa310263..8b10f6e38 100644 --- a/ishtar/ishtar_base/forms_operations.py +++ b/ishtar/ishtar_base/forms_operations.py @@ -37,7 +37,8 @@ import widgets from forms import Wizard, FinalForm, FormSet, SearchWizard, ClosingWizard, \ DeletionWizard, formset_factory, get_now, reverse_lazy, get_form_selection from forms_common import TownForm, TownFormSet, ParcelFormSet, ParcelForm,\ - AuthorFormset, SourceForm, SourceWizard, get_town_field + AuthorFormset, SourceForm, SourceWizard, SourceSelect, SourceDeletionForm,\ + get_town_field def is_preventive(form_name, model, type_key='operation_type', key=''): def func(self, request, storage): @@ -484,6 +485,7 @@ operation_closing_wizard = OperationClosingWizard([ class OperationDeletionWizard(DeletionWizard): model = models.Operation + fields = OperationClosingWizard.fields class OperationDeletionForm(FinalForm): confirm_msg = " " @@ -494,20 +496,63 @@ operation_deletion_wizard = OperationDeletionWizard([ ('final-operation_deletion', OperationDeletionForm)], url_name='operation_deletion',) +#################################### +# Source management for operations # +#################################### + class OperationSourceWizard(SourceWizard): model = models.OperationSource -OperationSourceFormSelection = get_form_selection( - 'OperationSourceFormSelection', _(u"Operation search"), 'operation', +SourceOperationFormSelection = get_form_selection( + 'SourceOperationFormSelection', _(u"Operation search"), 'operation', models.Operation, OperationSelect, 'get-operation', _(u"You should select an operation.")) -operation_source_add_wizard = OperationSourceWizard([ - ('selec-operation_source_add', OperationSourceFormSelection), - ('source-operation_source_add', SourceForm), - ('authors-operation_source_add', AuthorFormset), - ('final-operation_source_add', FinalForm)], - url_name='operation_source_add',) +operation_source_creation_wizard = OperationSourceWizard([ + ('selec-operation_source_creation', SourceOperationFormSelection), + ('source-operation_source_creation', SourceForm), + ('authors-operation_source_creation', AuthorFormset), + ('final-operation_source_creation', FinalForm)], + url_name='operation_source_creation',) + +class OperationSourceSelect(SourceSelect): + operation__towns = get_town_field(label=_(u"Operation's town")) + operation__operation_type = forms.ChoiceField(label=_(u"Operation type"), + choices=[]) + operation__year = forms.IntegerField(label=_(u"Operation's year")) + + def __init__(self, *args, **kwargs): + super(OperationSourceSelect, self).__init__(*args, **kwargs) + self.fields['operation__operation_type'].choices = \ + models.OperationType.get_types() + self.fields['operation__operation_type'].help_text = \ + models.OperationType.get_help() + + +OperationSourceFormSelection = get_form_selection( + 'OperationSourceFormSelection', _(u"Documentation search"), 'pk', + models.OperationSource, OperationSourceSelect, 'get-operationsource', + _(u"You should select a document.")) + +operation_source_modification_wizard = OperationSourceWizard([ + ('selec-operation_source_modification', OperationSourceFormSelection), + ('source-operation_source_modification', SourceForm), + ('authors-operation_source_modification', AuthorFormset), + ('final-operation_source_modification', FinalForm)], + url_name='operation_source_modification',) + +class OperationSourceDeletionWizard(DeletionWizard): + model = models.OperationSource + fields = ['operation', 'title', 'source_type', 'authors',] + +operation_source_deletion_wizard = OperationSourceDeletionWizard([ + ('selec-operation_source_deletion', OperationSourceFormSelection), + ('final-operation_source_deletion', SourceDeletionForm)], + url_name='operation_source_deletion',) + +################################################ +# Administrative act management for operations # +################################################ class OperationAdministrativeActWizard(OperationWizard): edit = False diff --git a/ishtar/ishtar_base/menus.py b/ishtar/ishtar_base/menus.py index 3f8a7dd59..f229e32f1 100644 --- a/ishtar/ishtar_base/menus.py +++ b/ishtar/ishtar_base/menus.py @@ -210,13 +210,30 @@ class Menu: 'add_own_treatment']), ]), SectionItem('source_management', _(u"Documentation"), - childs=[SectionItem('admin_add_sources', _(u"Add"), + childs=[ + SectionItem('admin_add_sources', _(u"Add"), childs=[ MenuItem('operation_source_add', _(u"Related to an operation"), model=models.OperationSource, access_controls=['change_operation', 'change_own_operation']), ]), + SectionItem('admin_mod_sources', _(u"Modify"), + childs=[ + MenuItem('operation_source_modification', + _(u"Related to an operation"), + model=models.OperationSource, + access_controls=['change_operation', + 'change_own_operation']), + ]), + SectionItem('admin_del_sources', _(u"Deletion"), + childs=[ + MenuItem('operation_source_deletion', + _(u"Related to an operation"), + model=models.OperationSource, + access_controls=['change_operation', + 'change_own_operation']), + ]), ]), SectionItem('warehouse', _(u"Warehouse"), childs=[ diff --git a/ishtar/ishtar_base/models.py b/ishtar/ishtar_base/models.py index 7de7b239b..8ae0af0f1 100644 --- a/ishtar/ishtar_base/models.py +++ b/ishtar/ishtar_base/models.py @@ -451,6 +451,7 @@ class Source(models.Model): title = models.CharField(_(u"Title"), max_length=200) source_type = models.ForeignKey(SourceType, verbose_name=_(u"Type")) authors = models.ManyToManyField(Author, verbose_name=_(u"Authors")) + TABLE_COLS = ['title', 'source_type', 'authors',] class Meta: abstract = True @@ -678,6 +679,8 @@ class OperationSource(Source): verbose_name_plural = _(u"Operation documentations") operation = models.ForeignKey(Operation, verbose_name=_(u"Operation"), related_name="source") + TABLE_COLS = ['operation.year', 'operation.operation_code'] + \ + Source.TABLE_COLS class Parcel(LightHistorizedItem): associated_file = models.ForeignKey(File, related_name='parcels', @@ -783,8 +786,8 @@ class IdentificationType(GeneralType): return self.label class ContextRecord(BaseHistorizedItem, OwnPerms): - TABLE_COLS = ['parcel.town', 'parcel.operation.year', - 'parcel.operation.operation_code', + TABLE_COLS = ['parcel.town', 'operation.year', + 'operation.operation_code', 'label', 'unit'] if settings.COUNTRY == 'fr': TABLE_COLS.insert(1, 'parcel.operation.code_patriarche') diff --git a/ishtar/ishtar_base/urls.py b/ishtar/ishtar_base/urls.py index cea34508f..b8ce788b8 100644 --- a/ishtar/ishtar_base/urls.py +++ b/ishtar/ishtar_base/urls.py @@ -26,64 +26,73 @@ import forms_main as ishtar_forms urlpatterns, actions = [], [] urlpatterns = patterns('', - url(BASE_URL + r'person_creation/(?P<step>.+)$', + url(BASE_URL + r'person_creation/(?P<step>.+)$', ishtar_forms.person_creation_wizard, name='person_creation'), - url(BASE_URL + r'person_modification/(?P<step>.+)$', + url(BASE_URL + r'person_modification/(?P<step>.+)$', ishtar_forms.person_modification_wizard, name='person_modification'), - url(BASE_URL + r'account_management/(?P<step>.+)$', + url(BASE_URL + r'account_management/(?P<step>.+)$', ishtar_forms.account_management_wizard, name='account_management'), - url(BASE_URL + r'file_search/(?P<step>.+)$', + url(BASE_URL + r'file_search/(?P<step>.+)$', ishtar_forms.file_search_wizard, name='file_search'), - url(BASE_URL + r'file_creation/(?P<step>.+)$', + url(BASE_URL + r'file_creation/(?P<step>.+)$', ishtar_forms.file_creation_wizard, name='file_creation'), - url(BASE_URL + r'file_modification/(?P<step>.+)$', + url(BASE_URL + r'file_modification/(?P<step>.+)$', ishtar_forms.file_modification_wizard, name='file_modification'), - url(BASE_URL + r'file_deletion/(?P<step>.+)$', + url(BASE_URL + r'file_deletion/(?P<step>.+)$', ishtar_forms.file_deletion_wizard, name='file_deletion'), - url(BASE_URL + r'file_administrativeactfile/(?P<step>.+)$', -ishtar_forms.file_administrativeactfile_wizard, name='file_administrativeactfile'), - url(BASE_URL + r'file_administrativeactfile_modification/(?P<step>.+)$', - ishtar_forms.file_administrativeactfile_modification_wizard, - name='file_administrativeactfile_modification'), - url(BASE_URL + r'file_administrativeactfile_deletion/(?P<step>.+)$', - ishtar_forms.file_administrativeactfile_deletion_wizard, - name='file_administrativeactfile_deletion'), - url(BASE_URL + r'operation_search/(?P<step>.+)$', + url(BASE_URL + r'file_administrativeactfile/(?P<step>.+)$', + ishtar_forms.file_administrativeactfile_wizard, + name='file_administrativeactfile'), + url(BASE_URL + r'file_administrativeactfile_modification/(?P<step>.+)$', + ishtar_forms.file_administrativeactfile_modification_wizard, + name='file_administrativeactfile_modification'), + url(BASE_URL + r'file_administrativeactfile_deletion/(?P<step>.+)$', + ishtar_forms.file_administrativeactfile_deletion_wizard, + name='file_administrativeactfile_deletion'), + url(BASE_URL + r'operation_search/(?P<step>.+)$', ishtar_forms.operation_search_wizard, name='operation_search'), - url(BASE_URL + r'operation_creation/(?P<step>.+)$', + url(BASE_URL + r'operation_creation/(?P<step>.+)$', ishtar_forms.operation_creation_wizard, name='operation_creation'), - url(BASE_URL + r'operation_modification/(?P<step>.+)$', - ishtar_forms.operation_modification_wizard, name='operation_modification'), - url(BASE_URL + r'operation_closing/(?P<step>.+)$', - ishtar_forms.operation_closing_wizard, name='operation_closing'), - url(BASE_URL + r'operation_deletion/(?P<step>.+)$', - ishtar_forms.operation_deletion_wizard, name='operation_deletion'), - url(BASE_URL + r'operation_administrativeactop/(?P<step>.+)$', - ishtar_forms.operation_administrativeactop_wizard, - name='operation_administrativeactop'), + url(BASE_URL + r'operation_modification/(?P<step>.+)$', + ishtar_forms.operation_modification_wizard, + name='operation_modification'), + url(BASE_URL + r'operation_closing/(?P<step>.+)$', + ishtar_forms.operation_closing_wizard, name='operation_closing'), + url(BASE_URL + r'operation_deletion/(?P<step>.+)$', + ishtar_forms.operation_deletion_wizard, name='operation_deletion'), + url(BASE_URL + r'operation_administrativeactop/(?P<step>.+)$', + ishtar_forms.operation_administrativeactop_wizard, + name='operation_administrativeactop'), url(BASE_URL + r'operation_administrativeactop_modification/(?P<step>.+)$', - ishtar_forms.operation_administrativeactop_modification_wizard, - name='operation_administrativeactop_modification'), + ishtar_forms.operation_administrativeactop_modification_wizard, + name='operation_administrativeactop_modification'), url(BASE_URL + r'operation_administrativeactop_deletion/(?P<step>.+)$', - ishtar_forms.operation_administrativeactop_deletion_wizard, - name='operation_administrativeactop_deletion'), - url(BASE_URL + r'operation_source_add/(?P<step>.+)$', - ishtar_forms.operation_source_add_wizard, name='operation_source_add'), - url(BASE_URL + r'record_search/(?P<step>.+)$', + ishtar_forms.operation_administrativeactop_deletion_wizard, + name='operation_administrativeactop_deletion'), + url(BASE_URL + r'operation_source_creation/(?P<step>.+)$', + ishtar_forms.operation_source_creation_wizard, + name='operation_source_creation'), + url(BASE_URL + r'operation_source_modification/(?P<step>.+)$', + ishtar_forms.operation_source_modification_wizard, + name='operation_source_modification'), + url(BASE_URL + r'operation_source_deletion/(?P<step>.+)$', + ishtar_forms.operation_source_deletion_wizard, + name='operation_source_deletion'), + url(BASE_URL + r'record_search/(?P<step>.+)$', ishtar_forms.record_search_wizard, name='record_search'), - url(BASE_URL + r'record_creation/(?P<step>.+)$', + url(BASE_URL + r'record_creation/(?P<step>.+)$', ishtar_forms.record_creation_wizard, name='record_creation'), - url(BASE_URL + r'record_modification/(?P<step>.+)$', + url(BASE_URL + r'record_modification/(?P<step>.+)$', ishtar_forms.record_modification_wizard, name='record_modification'), - url(BASE_URL + r'record_deletion/(?P<step>.+)$', + url(BASE_URL + r'record_deletion/(?P<step>.+)$', ishtar_forms.record_deletion_wizard, name='record_deletion'), - url(BASE_URL + r'item_search/(?P<step>.+)$', + url(BASE_URL + r'item_search/(?P<step>.+)$', ishtar_forms.item_search_wizard, name='item_search'), - url(BASE_URL + r'item_creation/(?P<step>.+)$', + url(BASE_URL + r'item_creation/(?P<step>.+)$', ishtar_forms.item_creation_wizard, name='item_creation'), - url(BASE_URL + r'item_modification/(?P<step>.+)$', + url(BASE_URL + r'item_modification/(?P<step>.+)$', ishtar_forms.item_modification_wizard, name='item_modification'), - url(BASE_URL + r'treatment_creation/(?P<step>.+)$', + url(BASE_URL + r'treatment_creation/(?P<step>.+)$', ishtar_forms.treatment_creation_wizard, name='treatment_creation'), ) for section in menu.childs: @@ -149,4 +158,6 @@ urlpatterns += patterns('ishtar.ishtar_base.views', 'new_author', name='new-author'), url(BASE_URL + r'new-organization/(?P<parent_name>.+)?/$', 'new_organization', name='new-organization'), + url(BASE_URL + r'get-operationsource/(?P<type>.+)?$', + 'get_operationsource', name='get-operationsource'), ) diff --git a/ishtar/ishtar_base/views.py b/ishtar/ishtar_base/views.py index 9e998c2dc..f1d4522ce 100644 --- a/ishtar/ishtar_base/views.py +++ b/ishtar/ishtar_base/views.py @@ -431,6 +431,12 @@ get_operation = get_item(models.Operation, 'get_operation', 'operation') show_operation = show_item(models.Operation, 'operation') revert_operation = revert_item(models.Operation) +get_operationsource = get_item(models.OperationSource, + 'get_operationsource', 'operationsource', + extra_request_keys={'operation__towns':'operation__towns__pk', + 'operation__operation_type':'operation__operation_type__pk', + 'operation__year':'operation__year'}) + get_administrativeactfile = get_item(models.AdministrativeAct, 'get_administrativeactfile', 'administrativeactfile', extra_request_keys={'associated_file__towns':'associated_file__towns__pk', |