diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-02-11 03:49:50 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-02-11 03:49:50 +0100 |
commit | a9b5d4dff598de052156c8586edac500aca8fede (patch) | |
tree | 4b5d5239772666448740fbf21dc00bb59549a130 | |
parent | 107463ea683b02c90a090fab65c8803383b9596a (diff) | |
download | Ishtar-a9b5d4dff598de052156c8586edac500aca8fede.tar.bz2 Ishtar-a9b5d4dff598de052156c8586edac500aca8fede.zip |
Modification of archaelogical file's admin act (refs #141)
-rw-r--r-- | ishtar/furnitures/forms.py | 59 | ||||
-rw-r--r-- | ishtar/furnitures/menus.py | 6 | ||||
-rw-r--r-- | ishtar/furnitures/models.py | 8 | ||||
-rw-r--r-- | ishtar/furnitures/urls.py | 7 | ||||
-rw-r--r-- | ishtar/furnitures/views.py | 16 |
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 \ |