diff options
| -rw-r--r-- | archaeological_operations/forms.py | 6 | ||||
| -rw-r--r-- | ishtar_common/admin.py | 66 | ||||
| -rw-r--r-- | ishtar_common/forms.py | 5 | 
3 files changed, 74 insertions, 3 deletions
| diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 841131da6..61be371d1 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -49,7 +49,7 @@ from ishtar_common import widgets  from ishtar_common.forms import FinalForm, FormSet, get_now, \      reverse_lazy, get_form_selection, TableSelect, get_data_from_formset, \ -    ManageOldType +    ManageOldType, CustomForm  from ishtar_common.forms_common import TownFormSet, SourceForm, SourceSelect, \      get_town_field @@ -761,8 +761,10 @@ class DashboardForm(forms.Form):          return fltr -class OperationFormGeneral(ManageOldType, forms.Form): +class OperationFormGeneral(ManageOldType, CustomForm, forms.Form):      form_label = _(u"General") +    form_admin_name = _(u"Operation - General") +    form_slug = "operation-general"      file_upload = True      associated_models = {'scientist': Person,                           'in_charge': Person, diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index c3ad21710..8045bff13 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -31,6 +31,7 @@ from django.contrib.contenttypes.models import ContentType  from django.contrib.sites.admin import SiteAdmin  from django.contrib.sites.models import Site  from django.contrib.gis.forms import PointField, OSMWidget, MultiPolygonField +from django.core.cache import cache  from django.http import HttpResponseRedirect, HttpResponse  from django.shortcuts import render  from django.template.defaultfilters import slugify @@ -38,8 +39,22 @@ from django.utils.translation import ugettext_lazy as _  from django import forms -from ishtar_common.apps import admin_site  from ishtar_common import models +from ishtar_common.apps import admin_site +from ishtar_common.utils import get_cache + +from ishtar_common import forms as common_forms +from archaeological_files import forms as file_forms +from archaeological_operations import forms as operation_forms +from archaeological_context_records import forms as context_record_forms +from archaeological_finds import forms as find_forms, \ +    forms_treatments as treatment_forms +from archaeological_warehouse import forms as warehouse_forms + + +ISHTAR_FORMS = [common_forms, file_forms, operation_forms, +                context_record_forms, find_forms, treatment_forms, +                warehouse_forms]  class ImportGenericForm(forms.Form): @@ -319,11 +334,14 @@ class ImporterModelAdmin(admin.ModelAdmin):      list_display = ('name', 'klass')      model = models.ImporterModel +  admin_site.register(models.ImporterModel, ImporterModelAdmin)  class FormaterTypeAdmin(admin.ModelAdmin):      list_display = ('formater_type', 'options') + +  admin_site.register(models.FormaterType, FormaterTypeAdmin) @@ -331,6 +349,8 @@ class ImportAdmin(admin.ModelAdmin):      list_display = ('name', 'importer_type', 'imported_file', 'user', 'state',                      'creation_date')      form = make_ajax_form(models.Import, {'user': 'ishtaruser'}) + +  admin_site.register(models.Import, ImportAdmin) @@ -338,6 +358,8 @@ class TargetKeyGroupAdmin(admin.ModelAdmin):      list_display = ('name', 'all_user_can_use', 'all_user_can_modify',                      'available')      search_fields = ('name',) + +  admin_site.register(models.TargetKeyGroup, TargetKeyGroupAdmin) @@ -346,6 +368,8 @@ class TargetKeyAdmin(admin.ModelAdmin):                      'value', 'is_set')      list_filter = ("is_set", "target__column__importer_type")      search_fields = ('target__target', 'value', 'key') + +  admin_site.register(models.TargetKey, TargetKeyAdmin) @@ -353,12 +377,15 @@ class OperationTypeAdmin(GeneralTypeAdmin):      list_display = GeneralTypeAdmin.list_display + ['order', 'preventive']      model = models.OperationType +  admin_site.register(models.OperationType, OperationTypeAdmin)  class SpatialReferenceSystemAdmin(GeneralTypeAdmin):      list_display = GeneralTypeAdmin.list_display + ['order', 'srid']      model = models.SpatialReferenceSystem + +  admin_site.register(models.SpatialReferenceSystem, SpatialReferenceSystemAdmin) @@ -418,6 +445,43 @@ class JsonDataFieldAdmin(admin.ModelAdmin):  admin_site.register(models.JsonDataField, JsonDataFieldAdmin) +def get_choices_form(): +    cache_key, value = get_cache(models.CustomForm, ['associated-forms']) +    if value: +        return value +    forms = set() +    for app_form in ISHTAR_FORMS: +        for form in dir(app_form): +            if 'Form' not in form: +                # not very clean... but do not treat inappropriate items +                continue +            form = getattr(app_form, form) +            if not issubclass(form, common_forms.CustomForm)\ +                    or not getattr(form, 'form_slug', None): +                continue +            forms.add((form.form_slug, form.form_admin_name)) +    forms = list(forms) +    cache.set(cache_key, forms, settings.CACHE_TIMEOUT) +    return forms + + +class CustomFormForm(forms.ModelForm): +    class Meta: +        model = models.CustomForm +        exclude = [] +    form = forms.ChoiceField(label=_(u"Form"), choices=get_choices_form) +    users = AutoCompleteSelectMultipleField('ishtaruser', required=False, +                                            label=_(u"Users")) + + +class CustomFormAdmin(admin.ModelAdmin): +    list_display = ['name', 'form', 'available'] +    form = CustomFormForm + + +admin_site.register(models.CustomForm, CustomFormAdmin) + +  class AdministrationScriptAdmin(admin.ModelAdmin):      list_display = ['name', 'path'] diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 5c3de7b77..d0c2bb035 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -298,6 +298,11 @@ class ManageOldType(object):              self.fields[field_name].help_text = model.get_help() +class CustomForm(object): +    form_admin_name = "" +    form_slug = "" + +  class DocumentGenerationForm(forms.Form):      """      Form to generate document by choosing the template | 
