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 | 529828b89b27da8f76e96fdede46bd16fec4468d (patch) | |
| tree | 7c483f9b207ccfa5b5391731f5ff5f03693fb42a /ishtar | |
| parent | 05c6d94c9547377c9979e9d860c6618ee898ef6e (diff) | |
| download | Ishtar-529828b89b27da8f76e96fdede46bd16fec4468d.tar.bz2 Ishtar-529828b89b27da8f76e96fdede46bd16fec4468d.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', | 
