summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/furnitures/forms.py59
-rw-r--r--ishtar/furnitures/menus.py6
-rw-r--r--ishtar/furnitures/models.py8
-rw-r--r--ishtar/furnitures/urls.py7
-rw-r--r--ishtar/furnitures/views.py16
5 files changed, 84 insertions, 12 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py
index 68c672c01..1e23c9877 100644
--- a/ishtar/furnitures/forms.py
+++ b/ishtar/furnitures/forms.py
@@ -1017,6 +1017,10 @@ file_closing_wizard = FileWizard([
"""
class FileAdministrativeActWizard(FileWizard):
+ edit = False
+ def get_associated_file(self, request, storage, dct):
+ return self.get_current_object(request, storage)
+
def done(self, request, storage, form_list, **kwargs):
'''
Save the administrative act
@@ -1035,23 +1039,33 @@ class FileAdministrativeActWizard(FileWizard):
if key in associated_models and value:
value = associated_models[key].objects.get(pk=value)
dct[key] = value
- associated_file = self.get_current_object(request, storage)
+ associated_file = self.get_associated_file(request, storage, dct)
if not associated_file:
return self.render(request, storage, form)
dct['associated_file'] = associated_file
dct['history_modifier'] = request.user
- if 'pk_admact':
- pass
- #admact = models.AdministrativeAct.objects()
- else:
- admact = models.AdministrativeAct.objects(**dct)
+ if self.edit:
+ admact = self.get_current_object(request, storage)
+ for k in dct:
+ if hasattr(admact, k):
+ setattr(admact, k, dct[k])
admact.save()
+ else:
+ admact = models.AdministrativeAct(**dct)
res = render_to_response('wizard_done.html', {},
context_instance=RequestContext(request))
return res
+class FileEditAdministrativeActWizard(FileAdministrativeActWizard):
+ model = models.AdministrativeAct
+ edit = True
+ def get_associated_file(self, request, storage, dct):
+ return self.get_current_object(request, storage).associated_file
+
class AdministrativeActForm(forms.Form):
form_label = _("Administrative act")
+ associated_models = {'act_type':models.ActType,
+ 'signatory':models.Person}
act_type = forms.ChoiceField(label=_("Act type"),
choices=models.ActType.get_types(dct={'intented_to':'F'}))
signatory = forms.IntegerField(label=_("Signatory"),
@@ -1065,12 +1079,45 @@ class AdministrativeActForm(forms.Form):
if settings.COUNTRY == 'fr':
ref_sra = forms.CharField(label=u"Référence SRA", max_length=15)
+class AdministrativeActFileSelect(forms.Form):
+ associated_file__towns = forms.IntegerField(label=_(u"Town"),
+ widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
+ 'autocomplete-town', associated_model=models.Town),
+ validators=[models.valid_id(models.Town)])
+ act_type = forms.ChoiceField(label=_("Act type"),
+ choices=models.ActType.get_types(dct={'intented_to':'F'}))
+
+class AdministrativeActFileFormSelection(forms.Form):
+ form_label = _("Administrative Act")
+ associated_models = {'pk':models.AdministrativeAct}
+ currents = {'pk':models.AdministrativeAct}
+ pk = forms.IntegerField(label="", required=False,
+ widget=widgets.JQueryJqGrid(reverse_lazy('get-administrativeact'),
+ AdministrativeActFileSelect(), models.AdministrativeAct),
+ validators=[models.valid_id(models.AdministrativeAct)])
+
+ 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 administrative"
+ " act."))
+ return cleaned_data
+
+
file_administrativeact_wizard = FileAdministrativeActWizard([
('selec-file_administrativeact', FileFormSelection),
('administrativeact-file_administrativeact', AdministrativeActForm),
('final-file_administrativeact', FinalForm)],
url_name='file_administrativeact',)
+file_administrativeact_modification_wizard = FileEditAdministrativeActWizard([
+ ('selec-file_administrativeact_modification',
+ AdministrativeActFileFormSelection),
+ ('administrativeact-file_administrativeact_modification',
+ AdministrativeActForm),
+ ('final-file_administrativeact_modification', FinalForm)],
+ url_name='file_administrativeact_modification',)
+
class OperationWizard(Wizard):
model = models.Operation
diff --git a/ishtar/furnitures/menus.py b/ishtar/furnitures/menus.py
index fa65a735b..691b828f2 100644
--- a/ishtar/furnitures/menus.py
+++ b/ishtar/furnitures/menus.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2010 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2010-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
@@ -88,6 +88,10 @@ class Menu:
_(u"Add an administrative act"),
model=models.Operation,
access_controls=['change_file', 'change_own_file']),
+ MenuItem('file_administrativeact_modification',
+ _(u"Modify an administrative act"),
+ model=models.AdministrativeAct,
+ access_controls=['change_file', 'change_own_file']),
]),
SectionItem('operation_management', _(u"Operation management"),
childs=[
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py
index 3112d00f6..e476c639a 100644
--- a/ishtar/furnitures/models.py
+++ b/ishtar/furnitures/models.py
@@ -652,6 +652,10 @@ class ActType(GeneralType):
verbose_name_plural = _(u"Act types")
class AdministrativeAct(BaseHistorizedItem, OwnPerms):
+ TABLE_COLS = ['act_type', 'associated_file', 'associated_file.towns',
+ 'operation.towns']
+ TABLE_COLS_FILE = ['act_type', 'associated_file', 'associated_file__towns',]
+ TABLE_COLS_OPE = ['act_type', 'ope__towns', 'operation__towns']
act_type = models.ForeignKey(ActType, verbose_name=_(u"Act type"))
in_charge = models.ForeignKey(Person, blank=True, null=True,
related_name='+', verbose_name=_(u"Person in charge of the operation"))
@@ -682,7 +686,9 @@ related_name='+', verbose_name=_(u"Person in charge of the scientific part"))
)
def __unicode__(self):
- return self.operation + u" - " + self.fact_object
+ return u" - ".join([unicode(item)
+ for item in [self.operation, self.associated_file, self.act_object]
+ if item])
class ContainerType(GeneralType):
lenght = models.IntegerField(_(u"Lenght"))
diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py
index 7d9a6873a..d9aa095ca 100644
--- a/ishtar/furnitures/urls.py
+++ b/ishtar/furnitures/urls.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2010 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2010-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
@@ -40,6 +40,9 @@ urlpatterns = patterns('',
ishtar_forms.file_deletion_wizard, name='file_deletion'),
url(BASE_URL + r'file_administrativeact/(?P<step>.+)$',
ishtar_forms.file_administrativeact_wizard, name='file_administrativeact'),
+ url(BASE_URL + r'file_administrativeact_modification/(?P<step>.+)$',
+ ishtar_forms.file_administrativeact_modification_wizard,
+ name='file_administrativeact_modification'),
url(BASE_URL + r'operation_creation/(?P<step>.+)$',
ishtar_forms.operation_creation_wizard, name='operation_creation'),
url(BASE_URL + r'operation_modification/(?P<step>.+)$',
@@ -77,4 +80,6 @@ urlpatterns += patterns('ishtar.furnitures.views',
name='get-operation'),
url(BASE_URL + r'update-current-item/$', 'update_current_item',
name='update-current-item'),
+ url(BASE_URL + r'get-administrativeact/(?P<type>.+)?$',
+ 'get_administrativeact', name='get-administrativeact'),
)
diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py
index 8350de9f8..f02d60e20 100644
--- a/ishtar/furnitures/views.py
+++ b/ishtar/furnitures/views.py
@@ -130,17 +130,19 @@ def autocomplete_file(request):
for file in files])
return HttpResponse(data, mimetype='text/plain')
-def get_item(model, func_name, default_name):
+def get_item(model, func_name, default_name, extra_request_keys=[]):
"""
Generic treatment of tables
"""
def func(request, type='json', **dct):
if not type:
type = 'json'
- fields = [model._meta.get_field_by_name(k)[0] for k in model._meta.get_all_field_names()]
+ fields = [model._meta.get_field_by_name(k)[0]
+ for k in model._meta.get_all_field_names()]
request_keys = dict([(field.name,
field.name + (hasattr(field, 'rel') and '__pk' or ''))
for field in fields])
+ request_keys.update(extra_request_keys)
dct = {}
for k in request_keys:
q = request.GET.get(k)
@@ -170,7 +172,10 @@ def get_item(model, func_name, default_name):
for item in items:
data = [item.pk]
for k in model.TABLE_COLS:
- val = getattr(item, k)
+ val = item
+ for ky in k.split('.'):
+ if val:
+ val = getattr(val, ky)
if hasattr(val, 'all'): # manage related objects
data.append(", ".join([v and unicode(v) or u""
for v in getattr(val, 'all')()]))
@@ -239,6 +244,11 @@ def autocomplete_operation(request, non_closed=True):
get_operation = get_item(models.Operation, 'get_operation', 'operation')
+get_administrativeact = get_item(models.AdministrativeAct,
+ 'get_administrativeact', 'administrativeact',
+ extra_request_keys={'associated_file__towns':'associated_file__towns__pk',
+ 'operation__towns':'operation__towns__pk'})
+
def autocomplete_organization(request, orga_type=None):
if not request.user.has_perm('furnitures.view_organization',
models.Organization) and \