summaryrefslogtreecommitdiff
path: root/ishtar/ishtar_base
diff options
context:
space:
mode:
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
commit6163889aae5f0724e4ad16cc91eee9c8cb15bb00 (patch)
tree7c483f9b207ccfa5b5391731f5ff5f03693fb42a /ishtar/ishtar_base
parent95773b4ccd0beaa31f76c93a7c9b5e24211401dc (diff)
downloadIshtar-6163889aae5f0724e4ad16cc91eee9c8cb15bb00.tar.bz2
Ishtar-6163889aae5f0724e4ad16cc91eee9c8cb15bb00.zip
Sources modification and deletion for Operations (refs #497)
Diffstat (limited to 'ishtar/ishtar_base')
-rw-r--r--ishtar/ishtar_base/forms_common.py30
-rw-r--r--ishtar/ishtar_base/forms_context_records.py2
-rw-r--r--ishtar/ishtar_base/forms_operations.py63
-rw-r--r--ishtar/ishtar_base/menus.py19
-rw-r--r--ishtar/ishtar_base/models.py7
-rw-r--r--ishtar/ishtar_base/urls.py91
-rw-r--r--ishtar/ishtar_base/views.py6
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',