diff options
Diffstat (limited to 'archaeological_operations')
| -rw-r--r-- | archaeological_operations/forms.py | 29 | ||||
| -rw-r--r-- | archaeological_operations/ishtar_menu.py | 13 | ||||
| -rw-r--r-- | archaeological_operations/models.py | 28 | ||||
| -rw-r--r-- | archaeological_operations/urls.py | 8 | ||||
| -rw-r--r-- | archaeological_operations/views.py | 12 | 
5 files changed, 81 insertions, 9 deletions
| diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 0faad26a9..246fa88a6 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -30,7 +30,7 @@ from django.db.models import Max  from django.forms.formsets import DELETION_FIELD_NAME, TOTAL_FORM_COUNT  from django.shortcuts import render_to_response  from django.template import RequestContext -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _, pgettext_lazy  from django.utils.safestring import mark_safe  from ishtar_common.models import valid_id, PersonType, Person, Town, \ @@ -682,3 +682,30 @@ class GenerateDocForm(forms.Form):          super(GenerateDocForm, self).__init__(*args, **kwargs)          self.fields['doc_generation'].choices = [('', u'-'*9)] + \                  [(choice.pk , unicode(choice)) for choice in choices] + +class AdministrativeActRegisterSelect(TableSelect): +    signature_date__year = forms.IntegerField(label=_(u"Year")) +    act_type = forms.ChoiceField(label=_("Act type"), choices=[]) + +    def __init__(self, *args, **kwargs): +        super(AdministrativeActRegisterSelect, self).__init__(*args, **kwargs) +        self.fields['act_type'].choices = models.ActType.get_types() +        self.fields['act_type'].help_text = models.ActType.get_help() + +class AdministrativeActRegisterFormSelection(forms.Form): +    form_label = pgettext_lazy('admin act register',u"Register") +    associated_models = {'pk':models.AdministrativeAct} +    currents = {'pk':models.AdministrativeAct} +    pk = forms.IntegerField(label="", required=False, +       widget=widgets.JQueryJqGrid(reverse_lazy('get-administrativeact'), +            AdministrativeActRegisterSelect, models.AdministrativeAct, +            table_cols='TABLE_COLS', +            source_full=reverse_lazy('get-administrativeact-full')), +       validators=[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 diff --git a/archaeological_operations/ishtar_menu.py b/archaeological_operations/ishtar_menu.py index 6015ae43a..5fa3ab433 100644 --- a/archaeological_operations/ishtar_menu.py +++ b/archaeological_operations/ishtar_menu.py @@ -1,6 +1,6 @@  #!/usr/bin/env python  # -*- coding: utf-8 -*- -# Copyright (C) 2012 Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2012-2013 É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 Affero General Public License as @@ -17,7 +17,7 @@  # See the file COPYING for details. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _, pgettext_lazy  from ishtar_common.menu_base import SectionItem, MenuItem @@ -90,6 +90,15 @@ MENU_SECTIONS = [                  ])          ]),      ), +    (35, SectionItem('administrativact_management', _(u"Administrative Act"), +        childs=[ +            MenuItem('administrativact_register', +                pgettext_lazy('admin act register',u"Register"), +                model=models.AdministrativeAct, +                access_controls=['view_administrativeact', +                                 'view_own_administrativeact']), +               ]) +    ),      (102, SectionItem('dashboard', _(u"Dashboard"),          childs=[                  MenuItem('dashboard_main', _(u"General informations"), diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 7648dd6bf..bbffe023f 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -25,6 +25,7 @@ from django.contrib.gis.db import models  from django.core.urlresolvers import reverse  from django.db.models import Q, Count, Sum, Max, Avg  from django.db.models.signals import post_save, m2m_changed +from django.forms import ValidationError  from django.utils.translation import ugettext_lazy as _, ugettext  from ishtar_common.utils import cached_label_changed @@ -390,8 +391,8 @@ class ActType(GeneralType):          ordering = ('label',)  class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter): -    TABLE_COLS = ['act_type', 'associated_file', 'operation', -                  'associated_file.towns', 'operation.towns'] +    TABLE_COLS = ['year', 'index', 'act_type', 'signature_date', +                  'associated_file', 'operation']      TABLE_COLS_FILE = ['act_type', 'associated_file', 'associated_file.towns',]      TABLE_COLS_OPE = ['act_type', 'operation', 'operation.towns']      act_type = models.ForeignKey(ActType, verbose_name=_(u"Act type")) @@ -441,6 +442,22 @@ class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter):            for item in [self.operation, self.associated_file, self.act_object]            if item]) +    @property +    def year(self): +        if not self.signature_date: +            return None +        return self.signature_date.year +    year_lbl = _(u"Year") + +    @property +    def towns(self): +        if self.associated_file: +            return self.associated_file.towns.all() +        elif self.operation: +            return self.operation.towns.all() +        return [] +    towns_lbl = _(u"Towns") +      def get_filename(self, operation=False):          filename = ''          if operation and self.operation: @@ -473,13 +490,14 @@ class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter):          if not self.index:              c_index = 1              q = AdministrativeAct.objects.filter(act_type__indexed=True, -                                  signature_date__year=year).order_by("-index") +                                  signature_date__year=year, +                                  index__isnull=False).order_by("-index")              if q.count(): -                c_index = q.all()[0].index +                c_index = q.all()[0].index + 1              self.index = c_index          if self.act_type.indexed:              conflict = AdministrativeAct.objects.filter(act_type__indexed=True, -                                                  signature_date__year=year +                                                  signature_date__year=year,                                                    index=self.index)              if self.pk:                  conflict = conflict.exclude(pk=self.pk) diff --git a/archaeological_operations/urls.py b/archaeological_operations/urls.py index e6a561f02..5f52254bd 100644 --- a/archaeological_operations/urls.py +++ b/archaeological_operations/urls.py @@ -52,6 +52,9 @@ urlpatterns = patterns('',             views.operation_closing_wizard, name='operation_closing'),         url(r'operation_deletion/(?P<step>.+)?$',             views.operation_deletion_wizard, name='operation_deletion'), +       url(r'administrativact_register/(?P<step>.+)?$', +           views.administrativact_register_wizard, +           name='administrativact_register'),  )  urlpatterns += patterns('archaeological_operations.views', @@ -71,6 +74,11 @@ urlpatterns += patterns('archaeological_operations.views',             'show_operation', name='show-historized-operation'),       url(r'get-administrativeactop/(?P<type>.+)?$',             'get_administrativeactop', name='get-administrativeactop'), +     url(r'get-administrativeact/(?P<type>.+)?$', +           'get_administrativeact', name='get-administrativeact'), +     url(r'get-administrativeact-full/(?P<type>.+)?$', +           'get_administrativeact', name='get-administrativeact-full', +           kwargs={'full':True}),       url(r'generatedoc-administrativeactop/(?P<pk>.+)?/(?P<template_pk>.+)?$',             'generatedoc_administrativeactop',             name='generatedoc-administrativeactop'), diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index f48c55f57..e2fa5c868 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -24,7 +24,7 @@ from django.db.models import Q  from django.http import HttpResponse  from django.shortcuts import render_to_response  from django.template.defaultfilters import slugify -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _, pgettext_lazy  from ishtar_common.views import get_item, show_item, revert_item, new_item  from ishtar_common.wizards import SearchWizard @@ -149,6 +149,10 @@ get_administrativeactop = get_item(models.AdministrativeAct,                          'operation__towns':'operation__towns__pk',                          'act_type__intented_to':'act_type__intented_to'}) +get_administrativeact = get_item(models.AdministrativeAct, +    'get_administrativeact', 'administrativeact', +    extra_request_keys={}) +  def dashboard_operation(request, *args, **kwargs):      """      Operation dashboard @@ -286,6 +290,12 @@ operation_administrativeactop_deletion_wizard = \      label=_(u"Operation: administrative act deletion"),      url_name='operation_administrativeactop_deletion',) +administrativact_register_wizard = SearchWizard.as_view([ +    ('general-administrativact_register', +                AdministrativeActRegisterFormSelection)], +    label=pgettext_lazy('admin act register',u"Register"), +    url_name='administrativact_register',) +  def generatedoc_administrativeactop(request, pk, template_pk=None):      if (not request.user.has_perm('ishtar_common.view_operation',                                    models.Operation) | 
