summaryrefslogtreecommitdiff
path: root/archaeological_operations
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_operations')
-rw-r--r--archaeological_operations/forms.py49
-rw-r--r--archaeological_operations/locale/fr/LC_MESSAGES/django.po470
-rw-r--r--archaeological_operations/models.py21
-rw-r--r--archaeological_operations/templates/ishtar/blocks/window_tables/administrativacts.html18
-rw-r--r--archaeological_operations/templates/ishtar/sheet_administrativeact.html1
-rw-r--r--archaeological_operations/templates/ishtar/sheet_operation.html29
-rw-r--r--archaeological_operations/templatetags/__init__.py0
-rw-r--r--archaeological_operations/templatetags/window_ope_tables.py10
-rw-r--r--archaeological_operations/urls.py6
-rw-r--r--archaeological_operations/views.py6
-rw-r--r--archaeological_operations/wizards.py2
11 files changed, 343 insertions, 269 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index 76d7055d9..2754f2d1a 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -103,6 +103,8 @@ class ParcelForm(forms.Form):
return self.cleaned_data
class ParcelSelectionForm(forms.Form):
+ _town = forms.ChoiceField(label=_("Town"), choices=(), required=False,
+ validators=[valid_id(models.Town)])
_parcel_selection = forms.CharField(label=_(u"Full text input"),
widget=SelectParcelWidget(attrs={'class':'parcel-select'}),
max_length=100, help_text=_(u"example: \"2013: XD:1 to "\
@@ -118,6 +120,13 @@ class ParcelFormSet(FormSet):
if self.forms[0].__class__.__name__ == 'ParcelForm':
self.selection_form = ParcelSelectionForm()
self.extra_form = self.selection_form
+ # copy town choices
+ town_choices = self.forms[0].fields['town'].choices[:]
+ if town_choices and not town_choices[0][0]:
+ # remove empty
+ town_choices = town_choices[1:]
+ if town_choices:
+ self.selection_form.fields['_town'].choices = town_choices
def as_table(self):
# add dynamic widget
@@ -142,25 +151,14 @@ class ParcelFormSet(FormSet):
def clean(self):
# manage parcel selection
- last_town, parcels = None, []
- if hasattr(self, 'cleaned_data') and self.cleaned_data:
- for parcel in reversed(self.cleaned_data):
- if parcel.get('town'):
- last_town = parcel.get('town')
- break
- if not last_town and 'town' in self.forms[0].fields.keys():
- towns = self.forms[0].fields['town'].choices
- if towns:
- towns.pop(0) # remove first empty
- if towns:
- last_town = towns[0][0]
+ selected_town, parcels = None, []
if self.data.get('_parcel_selection'):
parcels = parse_parcels(self.data['_parcel_selection'])
- if last_town:
- for idx, parcel in enumerate(parcels):
- parcel['town'] = last_town
- parcel['DELETE'] = False
- parcels[idx] = parcel
+ selected_town = self.data.get('_town')
+ for idx, parcel in enumerate(parcels):
+ parcel['town'] = selected_town
+ parcel['DELETE'] = False
+ parcels[idx] = parcel
c_max = self.total_form_count()
# pop the last extra form
extra_form = self.forms.pop()
@@ -188,6 +186,8 @@ ParcelFormSet = formset_factory(ParcelForm, can_delete=True,
ParcelFormSet.form_label = _(u"Parcels")
class OperationSelect(TableSelect):
+ year = forms.IntegerField(label=_("Year"))
+ operation_code = forms.IntegerField(label=_(u"Numeric reference"))
common_name = forms.CharField(label=_(u"Name (full text search)"),
max_length=30)
if settings.COUNTRY == 'fr':
@@ -203,7 +203,6 @@ class OperationSelect(TableSelect):
associated_model=Person), label=_(u"In charge"))
remains = forms.ChoiceField(label=_(u"Remains"), choices=[])
periods = forms.ChoiceField(label=_(u"Periods"), choices=[])
- year = forms.IntegerField(label=_("Year"))
start_before = forms.DateField(label=_(u"Started before"),
widget=widgets.JQueryDate)
start_after = forms.DateField(label=_(u"Started after"),
@@ -591,8 +590,13 @@ OperationSourceFormSelection = get_form_selection(
################################################
class AdministrativeActOpeSelect(TableSelect):
- operation__towns = get_town_field()
+ year = forms.IntegerField(label=_("Year"))
+ index = forms.IntegerField(label=_("Index"))
+ if settings.COUNTRY == 'fr':
+ ref_sra = forms.CharField(label=u"Référence SRA",
+ max_length=15)
act_type = forms.ChoiceField(label=_("Act type"), choices=[])
+ operation__towns = get_town_field()
def __init__(self, *args, **kwargs):
super(AdministrativeActOpeSelect, self).__init__(*args, **kwargs)
@@ -684,13 +688,12 @@ class GenerateDocForm(forms.Form):
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=[])
+class AdministrativeActRegisterSelect(AdministrativeActOpeSelect):
def __init__(self, *args, **kwargs):
super(AdministrativeActRegisterSelect, self).__init__(*args, **kwargs)
- self.fields['act_type'].choices = models.ActType.get_types()
+ self.fields['act_type'].choices = models.ActType.get_types(
+ dct={'indexed':True})
self.fields['act_type'].help_text = models.ActType.get_help()
class AdministrativeActRegisterFormSelection(forms.Form):
diff --git a/archaeological_operations/locale/fr/LC_MESSAGES/django.po b/archaeological_operations/locale/fr/LC_MESSAGES/django.po
index 9fc0976be..52bce19da 100644
--- a/archaeological_operations/locale/fr/LC_MESSAGES/django.po
+++ b/archaeological_operations/locale/fr/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: alpha\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-07 21:50+0100\n"
+"POT-Creation-Date: 2014-01-16 22:23+0100\n"
"PO-Revision-Date: 2010-12-09\n"
"Last-Translator: Étienne Loks <etienne.loks at peacefrogs net>\n"
"Language-Team: \n"
@@ -18,12 +18,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
-#: forms.py:63 forms.py:188 forms.py:427 forms.py:448 forms.py:452
-#: models.py:523 templates/ishtar/sheet_operation.html:86
+#: forms.py:63 forms.py:186 forms.py:425 forms.py:446 forms.py:450
+#: models.py:534 templates/ishtar/sheet_operation.html:87
msgid "Parcels"
msgstr "Parcelles"
-#: forms.py:66 forms.py:405 models.py:517
+#: forms.py:66 forms.py:106 forms.py:403 models.py:528
#: templates/ishtar/dashboards/dashboard_operation.html:302
#: templates/ishtar/dashboards/dashboard_operation.html:315
#: templates/ishtar/dashboards/dashboard_operation.html:482
@@ -31,17 +31,16 @@ msgstr "Parcelles"
msgid "Town"
msgstr "Commune"
-#: forms.py:68 forms.py:206 forms.py:306 forms.py:688 models.py:118
-#: models.py:450 models.py:515 templates/ishtar/sheet_operation.html:84
-#: templates/ishtar/sheet_operation.html:105
+#: forms.py:68 forms.py:204 forms.py:304 forms.py:686 models.py:118
+#: models.py:461 models.py:526 templates/ishtar/sheet_operation.html:85
msgid "Year"
msgstr "Année"
-#: forms.py:71 models.py:518 templates/ishtar/sheet_operation.html:85
+#: forms.py:71 models.py:529 templates/ishtar/sheet_operation.html:86
msgid "Section"
msgstr "Section"
-#: forms.py:73 models.py:519
+#: forms.py:73 models.py:530
msgid "Parcel number"
msgstr "Numéro de parcelle"
@@ -49,131 +48,132 @@ msgstr "Numéro de parcelle"
msgid "Town section and parcel number fields are required."
msgstr "La commune, la section et le numéro de parcelle sont obligatoire."
-#: forms.py:106
+#: forms.py:108
msgid "Full text input"
msgstr "Saisie libre"
-#: forms.py:108
+#: forms.py:110
msgid "example: \"2013: XD:1 to 13,24,33 to 39, YD:24\" or \"AB:24,AC:42\""
msgstr "exemple : \"2013: XD:1 à 13,24,33 à 39, YD:24\" ou \"AB:24,AC:42\""
-#: forms.py:182
+#: forms.py:180
msgid "There are identical parcels."
msgstr "Il y a des parcelles identiques."
-#: forms.py:191
+#: forms.py:189
msgid "Name (full text search)"
msgstr "Nom (recherche texte intégral)"
-#: forms.py:196 forms.py:294 forms.py:572 models.py:44 models.py:125
+#: forms.py:194 forms.py:292 forms.py:570 models.py:44 models.py:125
msgid "Operation type"
msgstr "Type d'opération"
-#: forms.py:203 models.py:116
+#: forms.py:201 models.py:116
msgid "In charge"
msgstr "Responsable"
-#: forms.py:204 models.py:127
+#: forms.py:202 models.py:127
msgid "Remains"
msgstr "Vestiges"
-#: forms.py:205 forms.py:477 forms.py:496 models.py:130
-#: templates/ishtar/sheet_operation.html:160
+#: forms.py:203 forms.py:475 forms.py:494 models.py:130
+#: templates/ishtar/sheet_operation.html:144
msgid "Periods"
msgstr "Périodes"
-#: forms.py:207
+#: forms.py:205
msgid "Started before"
msgstr "Commencé avant"
-#: forms.py:209
+#: forms.py:207
msgid "Started after"
msgstr "Commencé après"
-#: forms.py:211
+#: forms.py:209
msgid "Ended before"
msgstr "Terminé avant"
-#: forms.py:213
+#: forms.py:211
msgid "Ended after"
msgstr "Terminé après"
-#: forms.py:215
+#: forms.py:213
msgid "Parcel (section/number)"
msgstr "Parcelle (section/numéro)"
-#: forms.py:216
+#: forms.py:214
msgid "Is open?"
msgstr "Est ouvert ?"
-#: forms.py:235 forms.py:566 views.py:168
+#: forms.py:233 forms.py:564 views.py:169
msgid "Operation search"
msgstr "Recherche d'opérations"
-#: forms.py:247 forms.py:568
+#: forms.py:245 forms.py:566
msgid "You should select an operation."
msgstr "Vous devez sélectionner une opération."
-#: forms.py:275 forms.py:622 templates/ishtar/sheet_operation.html:28
+#: forms.py:273 forms.py:620 templates/ishtar/sheet_administrativeact.html:11
+#: templates/ishtar/sheet_operation.html:28
msgid "General"
msgstr "Général"
-#: forms.py:283 models.py:400
+#: forms.py:281 models.py:401
msgid "Person in charge of the operation"
msgstr "Responsable d'opération"
-#: forms.py:290 models.py:378 models.py:414 wizards.py:80
+#: forms.py:288 models.py:378 models.py:415 wizards.py:80
msgid "Archaelogical file"
msgstr "Dossier archéologique"
-#: forms.py:296 models.py:66 models.py:109 models.py:569
+#: forms.py:294 models.py:66 models.py:109 models.py:580
msgid "Start date"
msgstr "Date de début"
-#: forms.py:298 models.py:110
+#: forms.py:296 models.py:110
msgid "Excavation end date"
msgstr "Date de fin de chantier"
-#: forms.py:300 models.py:113
+#: forms.py:298 models.py:113
msgid "Report delivery date"
msgstr "Date de livraison du rapport"
-#: forms.py:303
+#: forms.py:301
msgid "Total surface (m²)"
msgstr "Surface totale des terrains (m²)"
-#: forms.py:310 models.py:119 models.py:279
+#: forms.py:308 models.py:119 models.py:279
msgid "Operation code"
msgstr "Code de l'opération"
-#: forms.py:313 models.py:162
+#: forms.py:311 models.py:162
msgid "Generic name"
msgstr "Nom générique"
-#: forms.py:315 models.py:160
+#: forms.py:313 models.py:160
msgid "Operator reference"
msgstr "Référence de l'opérateur"
-#: forms.py:319
+#: forms.py:317
msgid "Associated archaeological sites"
msgstr "Sites archéologiques associés"
-#: forms.py:339 models.py:164
+#: forms.py:337 models.py:164
msgid "Comment"
msgstr "Commentaire"
-#: forms.py:352
+#: forms.py:350
msgid ""
"If you want to set an excavation end date you have to provide a start date."
msgstr ""
"Avant de renseigner la date de fin de chantier, il est nécessaire de "
"renseigner une date de début."
-#: forms.py:355
+#: forms.py:353
msgid "The excavation end date cannot be before the start date."
msgstr "La date de fin de chantier ne peut être avant la date de début."
-#: forms.py:369
+#: forms.py:367
#, python-format
msgid ""
"Operation code already exist for year: %(year)d - use a value bigger than "
@@ -182,110 +182,110 @@ msgstr ""
"Ce code d'opération existe déjà pour l'année %(year)d - utilisez une valeur "
"plus grande que %(last_val)d"
-#: forms.py:373
+#: forms.py:371
msgid "Bad operation code"
msgstr "Mauvais code d'opération"
-#: forms.py:378
+#: forms.py:376
msgid "Preventive informations - excavation"
msgstr "Information archéologie préventive - fouille"
-#: forms.py:379 models.py:129
+#: forms.py:377 models.py:129
#: templates/ishtar/dashboards/dashboard_operation.html:495
msgid "Cost (€)"
msgstr "Cout (€)"
-#: forms.py:380 models.py:131
+#: forms.py:378 models.py:131
msgid "Scheduled man-days"
msgstr "Jours-hommes prévus"
-#: forms.py:382 models.py:133
+#: forms.py:380 models.py:133
msgid "Optional man-days"
msgstr "Jours-hommes optionnels"
-#: forms.py:384 models.py:135
+#: forms.py:382 models.py:135
msgid "Effective man-days"
msgstr "Jours-hommes effectifs"
-#: forms.py:393
+#: forms.py:391
msgid "Preventive informations - diagnostic"
msgstr "Information archéologie préventive - diagnostic"
-#: forms.py:396 models.py:148
+#: forms.py:394 models.py:148
msgid "Prescription on zoning"
msgstr "Prescription sur zonage"
-#: forms.py:398 models.py:150
+#: forms.py:396 models.py:150
msgid "Prescription on large area"
msgstr "Prescription sur une vaste surface"
-#: forms.py:400 models.py:152
+#: forms.py:398 models.py:152
msgid "Prescription on geoarchaeological context"
msgstr "Prescription sur un contexte géoarchéologique"
-#: forms.py:403 forms.py:424 models.py:128 models.py:459
+#: forms.py:401 forms.py:422 models.py:128 models.py:470
msgid "Towns"
msgstr "Communes"
-#: forms.py:429 models.py:522 models.py:568
-#: templates/ishtar/sheet_operation.html:132
-#: templates/ishtar/sheet_operation.html:164
+#: forms.py:427 models.py:533 models.py:579
+#: templates/ishtar/sheet_operation.html:116
+#: templates/ishtar/sheet_operation.html:148
msgid "Parcel"
msgstr "Parcelle"
-#: forms.py:455 forms.py:474 models.py:61
+#: forms.py:453 forms.py:472 models.py:61
msgid "Remain types"
msgstr "Types de vestige"
-#: forms.py:458 models.py:60
+#: forms.py:456 models.py:60
msgid "Remain type"
msgstr "Type de vestige"
-#: forms.py:470
+#: forms.py:468
msgid "There are identical remain types"
msgstr "Il y a des types de vestige identiques."
-#: forms.py:480
+#: forms.py:478
msgid "Period"
msgstr "Période"
-#: forms.py:492
+#: forms.py:490
msgid "There are identical periods"
msgstr "Il y a des périodes identiques."
-#: forms.py:499 models.py:80
+#: forms.py:497 models.py:80
msgid "Reference"
msgstr "Référence"
-#: forms.py:500 models.py:81
+#: forms.py:498 models.py:81
msgid "Name"
msgstr "Nom"
-#: forms.py:506
+#: forms.py:504
msgid "This reference already exists."
msgstr "Cette référence existe déjà."
-#: forms.py:515
+#: forms.py:513
msgid "Associated archaelogical sites"
msgstr "Entités archéologiques associées"
-#: forms.py:521 ishtar_menu.py:29
+#: forms.py:519 ishtar_menu.py:29
msgid "Search"
msgstr "Recherche"
-#: forms.py:525
+#: forms.py:523
msgid "Would you like to close this operation?"
msgstr "Voulez vous clore cette opération ?"
-#: forms.py:529
+#: forms.py:527
msgid "Would you like to delete this operation?"
msgstr "Voulez vous supprimer cette opération ?"
-#: forms.py:537 models.py:369 models.py:401
+#: forms.py:535 models.py:369 models.py:402
msgid "Index"
msgstr "Index"
-#: forms.py:560
+#: forms.py:558
#, python-format
msgid ""
"Index already exist for operation: %(operation)s - use a value bigger than "
@@ -294,69 +294,69 @@ msgstr ""
"Cet index existe déjà pour l'opération : %(operation)s, utilisez une valeur "
"plus grande que %(last_val)d"
-#: forms.py:571
+#: forms.py:569
msgid "Operation's town"
msgstr "Commune de l'opération"
-#: forms.py:574
+#: forms.py:572
msgid "Operation's year"
msgstr "Année de l'opération"
-#: forms.py:585
+#: forms.py:583
msgid "Documentation search"
msgstr "Recherche de document"
-#: forms.py:587
+#: forms.py:585
msgid "You should select a document."
msgstr "Vous devez sélectionner un document."
-#: forms.py:595 forms.py:625 forms.py:689 models.py:389 models.py:398
+#: forms.py:593 forms.py:623 forms.py:687 models.py:389 models.py:399
msgid "Act type"
msgstr "Type d'acte"
-#: forms.py:605
+#: forms.py:603
msgid "Administrative act search"
msgstr "Recherche d'actes administratifs"
-#: forms.py:617 forms.py:710
+#: forms.py:615 forms.py:708
msgid "You should select an administrative act."
msgstr "Vous devez sélectionner un acte administratif."
-#: forms.py:626 models.py:408
+#: forms.py:624 models.py:409
msgid "Signatory"
msgstr "Signataire"
-#: forms.py:630 models.py:417
+#: forms.py:628 models.py:418
msgid "Object"
msgstr "Objet"
-#: forms.py:632 models.py:415
+#: forms.py:630 models.py:416
msgid "Signature date"
msgstr "Date de signature"
-#: forms.py:647
+#: forms.py:645
msgid "Would you like to delete this administrative act?"
msgstr "Voulez vous supprimer cet acte administratif ?"
-#: forms.py:651
+#: forms.py:649
msgid "Template"
msgstr "Patron"
-#: forms.py:676
+#: forms.py:674
msgid "Doc generation"
msgstr "Generation de document"
-#: forms.py:678
+#: forms.py:676
msgid "Generate the associated doc?"
msgstr "Générer le document associé ?"
-#: forms.py:697 ishtar_menu.py:96 views.py:305
+#: forms.py:695 ishtar_menu.py:96 views.py:306
msgctxt "admin act register"
msgid "Register"
msgstr "Registre"
#: ishtar_menu.py:27 models.py:172 models.py:356 models.py:367 models.py:379
-#: models.py:410 models.py:514 templates/ishtar/sheet_operation.html:6
+#: models.py:411 models.py:525 templates/ishtar/sheet_operation.html:6
msgid "Operation"
msgstr "Opération"
@@ -376,7 +376,8 @@ msgstr "Clotûre"
msgid "Deletion"
msgstr "Suppression"
-#: ishtar_menu.py:51 models.py:425
+#: ishtar_menu.py:51 models.py:426
+#: templates/ishtar/sheet_administrativeact.html:6
msgid "Administrative act"
msgstr "Acte administratif"
@@ -421,7 +422,7 @@ msgstr "Types d'opération"
msgid "Order"
msgstr "Ordre"
-#: models.py:67 models.py:570
+#: models.py:67 models.py:581
msgid "End date"
msgstr "Date de fin"
@@ -469,7 +470,7 @@ msgstr "Peut supprimer ses propres entités archéologiques"
msgid "Closing date"
msgstr "Date de clotûre"
-#: models.py:123 models.py:512
+#: models.py:123 models.py:523
msgid "File"
msgstr "Dossier"
@@ -552,119 +553,124 @@ msgstr "Indexé"
msgid "Act types"
msgstr "Types d'acte"
-#: models.py:403
+#: models.py:404
msgid "Archaeological preventive operator"
msgstr "Opérateur d'archéologie préventive"
-#: models.py:406
+#: models.py:407
msgid "Person in charge of the scientific part"
msgstr "Responsable scientifique"
-#: models.py:426 templates/ishtar/sheet_operation.html:103
+#: models.py:427
msgid "Administrative acts"
msgstr "Actes administratifs"
-#: models.py:429
+#: models.py:430
msgid "Can view all Administrative act"
msgstr "Peut voir tout les Actes administratifs"
-#: models.py:431
+#: models.py:432
msgid "Can view own Administrative act"
msgstr "Peut voir son propre Acte administratif"
-#: models.py:433
+#: models.py:434
msgid "Can add own Administrative act"
msgstr "Peut ajouter son propre Acte administratif"
-#: models.py:435
+#: models.py:436
msgid "Can change own Administrative act"
msgstr "Peut changer son propre Acte administratif"
-#: models.py:437
+#: models.py:438
msgid "Can delete own Administrative act"
msgstr "Peut supprimer son propre Acte administratif"
-#: models.py:505
+#: models.py:446
+#: templates/ishtar/blocks/window_tables/administrativacts.html:5
+msgid "Ref."
+msgstr "Réf."
+
+#: models.py:516
msgid "This index already exists for this year"
msgstr "Cet index existe déjà pour cette année."
-#: models.py:567
+#: models.py:578
msgid "Owner"
msgstr "Propriétaire"
-#: models.py:573
+#: models.py:584
msgid "Parcel owner"
msgstr "Propriétaire de parcelle"
-#: models.py:574
+#: models.py:585
msgid "Parcel owners"
msgstr "Propriétaires de parcelle"
-#: models.py:598
+#: models.py:609
msgid "Recorded"
msgstr "Enregistré"
-#: models.py:599
+#: models.py:610
msgid "Effective"
msgstr "Effectif"
-#: models.py:600
+#: models.py:611
msgid "Active"
msgstr "Actif"
-#: models.py:601
+#: models.py:612
msgid "Field completed"
msgstr "Terrain achevé"
-#: models.py:602
+#: models.py:613
msgid "Associated report"
msgstr "Rapport associé"
-#: models.py:603
+#: models.py:614
msgid "Closed"
msgstr "Fermé"
-#: models.py:604
+#: models.py:615
msgid "Documented and closed"
msgstr "Documenté et clôt"
-#: views.py:182
+#: views.py:183
msgid "New operation"
msgstr "Nouvelle opération"
-#: views.py:213
+#: views.py:214
msgid "Operation modification"
msgstr "Modification d'une opération"
-#: views.py:243
+#: views.py:244
msgid "Operation closing"
msgstr "Clotûre de l'opération"
-#: views.py:249
+#: views.py:250
msgid "Operation deletion"
msgstr "Suppression d'une opération"
-#: views.py:257
+#: views.py:258
msgid "Operation: source creation"
msgstr "Operation : nouvelle documentation associée"
-#: views.py:265
+#: views.py:266
msgid "Operation: source modification"
msgstr "Operation : modification d'une documentation associée"
-#: views.py:271
+#: views.py:272
msgid "Operation: source deletion"
msgstr "Operation : suppression d'une documentation associée"
-#: views.py:280
+#: views.py:281
msgid "Operation: new administrative act"
msgstr "Operation : nouvel acte administratif"
-#: views.py:290
+#: views.py:291
msgid "Operation: administrative act modification"
msgstr "Operation : modification d'un acte administratif"
-#: views.py:299
+#: views.py:300
msgid "Operation: administrative act deletion"
msgstr "Operation : suppression d'un acte administratif"
@@ -676,46 +682,87 @@ msgstr ""
"Attention : Aucun dossier archéologique n'a été précisé. S'il s'agit d'un "
"oubli, définissez le à la première étape."
-#: templates/ishtar/sheet_operation.html:14
-msgid "Previous version"
-msgstr "Version précédente"
-
-#: templates/ishtar/sheet_operation.html:18
-msgid "Are you sure to rollback to this version?"
-msgstr "Êtes vous sûr de vouloir revenir à cette version ?"
-
-#: templates/ishtar/sheet_operation.html:19
-msgid "Next version"
-msgstr "Version suivante"
-
+#: templates/ishtar/sheet_administrativeact.html:10
#: templates/ishtar/sheet_operation.html:24
msgid "Export as:"
msgstr "Exporter en :"
+#: templates/ishtar/sheet_administrativeact.html:10
#: templates/ishtar/sheet_operation.html:24
msgid "OpenOffice.org file"
msgstr "Fichier OpenOffice.org"
+#: templates/ishtar/sheet_administrativeact.html:10
#: templates/ishtar/sheet_operation.html:24
msgid "PDF file"
msgstr "Fichier PDF"
-#: templates/ishtar/sheet_operation.html:26
-msgid "Modify"
-msgstr "Modifier"
-
-#: templates/ishtar/sheet_operation.html:29
-msgid "Name:"
-msgstr "Nom :"
-
+#: templates/ishtar/sheet_administrativeact.html:12
#: templates/ishtar/sheet_operation.html:30
msgid "Year:"
msgstr "Année :"
+#: templates/ishtar/sheet_administrativeact.html:13
#: templates/ishtar/sheet_operation.html:31
msgid "Numerical reference:"
msgstr "Identifiant numérique :"
+#: templates/ishtar/sheet_administrativeact.html:14
+#: templates/ishtar/sheet_operation.html:47
+msgid "Type:"
+msgstr "Type :"
+
+#: templates/ishtar/sheet_administrativeact.html:15
+msgid "Signature date:"
+msgstr "Date de signature :"
+
+#: templates/ishtar/sheet_administrativeact.html:16
+msgid "In charge:"
+msgstr "Responsable :"
+
+#: templates/ishtar/sheet_administrativeact.html:17
+msgid "Archaeological preventive operator:"
+msgstr "Opérateur d'archéologie préventive :"
+
+#: templates/ishtar/sheet_administrativeact.html:19
+#: templates/ishtar/sheet_operation.html:56
+msgid "Associated file:"
+msgstr "Dossier archéologique associé :"
+
+#: templates/ishtar/sheet_administrativeact.html:20
+msgid "Associated operation:"
+msgstr "Opération associée :"
+
+#: templates/ishtar/sheet_administrativeact.html:22
+#: templates/ishtar/sheet_operation.html:48
+msgid "Surface:"
+msgstr "Surface :"
+
+#: templates/ishtar/sheet_administrativeact.html:23
+#: templates/ishtar/sheet_operation.html:37
+msgid "Created by:"
+msgstr "Créé par :"
+
+#: templates/ishtar/sheet_operation.html:14
+msgid "Previous version"
+msgstr "Version précédente"
+
+#: templates/ishtar/sheet_operation.html:18
+msgid "Are you sure to rollback to this version?"
+msgstr "Êtes vous sûr de vouloir revenir à cette version ?"
+
+#: templates/ishtar/sheet_operation.html:19
+msgid "Next version"
+msgstr "Version suivante"
+
+#: templates/ishtar/sheet_operation.html:26
+msgid "Modify"
+msgstr "Modifier"
+
+#: templates/ishtar/sheet_operation.html:29
+msgid "Name:"
+msgstr "Nom :"
+
#: templates/ishtar/sheet_operation.html:33
msgid "Patriarche OA code:"
msgstr "Code d'opération Patriarche"
@@ -728,231 +775,219 @@ msgstr "Code d'opération Patriarche non renseigné !"
msgid "Edition date:"
msgstr "Date d'édition :"
-#: templates/ishtar/sheet_operation.html:38
+#: templates/ishtar/sheet_operation.html:39
msgid "Begining date:"
msgstr "Date de début :"
-#: templates/ishtar/sheet_operation.html:39
+#: templates/ishtar/sheet_operation.html:40
msgid "Excavation end date:"
msgstr "Date de fin de chantier :"
-#: templates/ishtar/sheet_operation.html:41
+#: templates/ishtar/sheet_operation.html:42
msgid "Head scientist:"
msgstr "Responsable scientifique :"
-#: templates/ishtar/sheet_operation.html:42
+#: templates/ishtar/sheet_operation.html:43
msgid "State:"
msgstr "État :"
-#: templates/ishtar/sheet_operation.html:42
+#: templates/ishtar/sheet_operation.html:43
msgid "Active file"
msgstr "Dossier archéologique actif"
-#: templates/ishtar/sheet_operation.html:43
+#: templates/ishtar/sheet_operation.html:44
msgid "Closed operation"
msgstr "Opération fermée"
-#: templates/ishtar/sheet_operation.html:44
+#: templates/ishtar/sheet_operation.html:45
msgid "Closing date:"
msgstr "Date de clotûre :"
-#: templates/ishtar/sheet_operation.html:44
+#: templates/ishtar/sheet_operation.html:45
msgid "by"
msgstr "par"
-#: templates/ishtar/sheet_operation.html:46
-msgid "Type:"
-msgstr "Type :"
-
-#: templates/ishtar/sheet_operation.html:47
-msgid "Surface:"
-msgstr "Surface :"
-
-#: templates/ishtar/sheet_operation.html:48
+#: templates/ishtar/sheet_operation.html:49
msgid "Cost:"
msgstr "Coût :"
-#: templates/ishtar/sheet_operation.html:49
+#: templates/ishtar/sheet_operation.html:50
msgid "Duration:"
msgstr "Durée :"
-#: templates/ishtar/sheet_operation.html:49
+#: templates/ishtar/sheet_operation.html:50
msgid "Day"
msgstr "Jour"
-#: templates/ishtar/sheet_operation.html:51
+#: templates/ishtar/sheet_operation.html:52
msgid "Remains:"
msgstr "Vestiges :"
-#: templates/ishtar/sheet_operation.html:52
+#: templates/ishtar/sheet_operation.html:53
msgid "Periods:"
msgstr "Périodes :"
-#: templates/ishtar/sheet_operation.html:55
-msgid "Associated file:"
-msgstr "Dossier archéologique associé :"
-
-#: templates/ishtar/sheet_operation.html:58
+#: templates/ishtar/sheet_operation.html:59
msgid "Town planning service:"
msgstr "Service instructeur :"
-#: templates/ishtar/sheet_operation.html:59
+#: templates/ishtar/sheet_operation.html:60
msgid "Permit type:"
msgstr "Type de permis :"
-#: templates/ishtar/sheet_operation.html:60
+#: templates/ishtar/sheet_operation.html:61
msgid "Permit reference:"
msgstr "Référence du permis :"
-#: templates/ishtar/sheet_operation.html:61
+#: templates/ishtar/sheet_operation.html:62
msgid "General contractor organisation:"
msgstr "Organisation de l'aménageur :"
-#: templates/ishtar/sheet_operation.html:62
+#: templates/ishtar/sheet_operation.html:63
msgid "General contractor:"
msgstr "Aménageur :"
-#: templates/ishtar/sheet_operation.html:66
+#: templates/ishtar/sheet_operation.html:67
msgid "Comment:"
msgstr "Commentaire :"
-#: templates/ishtar/sheet_operation.html:68
+#: templates/ishtar/sheet_operation.html:69
msgid "Localisation"
msgstr "Localisation"
-#: templates/ishtar/sheet_operation.html:69
+#: templates/ishtar/sheet_operation.html:70
msgid "Towns:"
msgstr "Communes :"
-#: templates/ishtar/sheet_operation.html:71
+#: templates/ishtar/sheet_operation.html:72
msgid "Main address:"
msgstr "Adresse des terrains :"
-#: templates/ishtar/sheet_operation.html:72
+#: templates/ishtar/sheet_operation.html:73
msgid "Complement:"
msgstr "Complément :"
-#: templates/ishtar/sheet_operation.html:73
+#: templates/ishtar/sheet_operation.html:74
msgid "Postal code:"
msgstr "Code postal :"
-#: templates/ishtar/sheet_operation.html:81
+#: templates/ishtar/sheet_operation.html:82
msgid "Associated parcels"
msgstr "Parcelles associées"
-#: templates/ishtar/sheet_operation.html:83
+#: templates/ishtar/sheet_operation.html:84
msgid "Commune"
msgstr "Commune"
-#: templates/ishtar/sheet_operation.html:98
+#: templates/ishtar/sheet_operation.html:99
msgid "No parcel associated to this operation"
msgstr "Pas de parcelle associée à cette opération"
-#: templates/ishtar/sheet_operation.html:106
-msgid "Ref."
-msgstr "Réf."
-
-#: templates/ishtar/sheet_operation.html:107
-#: templates/ishtar/sheet_operation.html:129
-#: templates/ishtar/dashboards/dashboard_operation.html:82
-msgid "Type"
-msgstr "Type"
-
-#: templates/ishtar/sheet_operation.html:108
-msgid "Date"
-msgstr "Date"
-
-#: templates/ishtar/sheet_operation.html:118
-msgid "No acts associated to this operation"
-msgstr "Pas d'acte associé à cette opération"
+#: templates/ishtar/sheet_operation.html:103
+msgid "Administrativ acts"
+msgstr "Actes administratifs"
-#: templates/ishtar/sheet_operation.html:122
+#: templates/ishtar/sheet_operation.html:106
msgid "Document from this operation"
msgstr "Documents de cette opération"
-#: templates/ishtar/sheet_operation.html:126
+#: templates/ishtar/sheet_operation.html:110
msgid "Context records"
msgstr "Unité d'Enregistrement"
-#: templates/ishtar/sheet_operation.html:128
+#: templates/ishtar/sheet_operation.html:112
msgid "ID"
msgstr "Identifiant"
-#: templates/ishtar/sheet_operation.html:130
+#: templates/ishtar/sheet_operation.html:113
+#: templates/ishtar/blocks/window_tables/administrativacts.html:6
+#: templates/ishtar/dashboards/dashboard_operation.html:82
+msgid "Type"
+msgstr "Type"
+
+#: templates/ishtar/sheet_operation.html:114
msgid "Chronology"
msgstr "Chronologie"
-#: templates/ishtar/sheet_operation.html:131
-#: templates/ishtar/sheet_operation.html:161
+#: templates/ishtar/sheet_operation.html:115
+#: templates/ishtar/sheet_operation.html:145
msgid "Description"
msgstr "Description"
-#: templates/ishtar/sheet_operation.html:142
-#: templates/ishtar/sheet_operation.html:185
+#: templates/ishtar/sheet_operation.html:126
+#: templates/ishtar/sheet_operation.html:169
msgid "Details"
msgstr "Détails"
-#: templates/ishtar/sheet_operation.html:145
+#: templates/ishtar/sheet_operation.html:129
msgid "No context record associated to this operation"
msgstr "Pas d'Unité d'Enregistrement associée à cette opération"
-#: templates/ishtar/sheet_operation.html:149
+#: templates/ishtar/sheet_operation.html:133
msgid "Documents from associated context records"
msgstr "Documents d'Unité d'Enregistrement associés"
-#: templates/ishtar/sheet_operation.html:154
+#: templates/ishtar/sheet_operation.html:138
msgid "Finds"
msgstr "Mobilier"
-#: templates/ishtar/sheet_operation.html:156
+#: templates/ishtar/sheet_operation.html:140
msgid "Complete Id"
msgstr "Id complet"
-#: templates/ishtar/sheet_operation.html:157
+#: templates/ishtar/sheet_operation.html:141
msgid "Short Id"
msgstr "Id court"
-#: templates/ishtar/sheet_operation.html:158
+#: templates/ishtar/sheet_operation.html:142
msgid "Material type"
msgstr "Type de matériau"
-#: templates/ishtar/sheet_operation.html:159
+#: templates/ishtar/sheet_operation.html:143
msgctxt "short"
msgid "Context record"
msgstr "UE"
-#: templates/ishtar/sheet_operation.html:162
+#: templates/ishtar/sheet_operation.html:146
msgid "Weight"
msgstr "Poids"
-#: templates/ishtar/sheet_operation.html:163
+#: templates/ishtar/sheet_operation.html:147
msgid "Numbers"
msgstr "Nombre"
-#: templates/ishtar/sheet_operation.html:165
+#: templates/ishtar/sheet_operation.html:149
msgid "Container ref."
msgstr "Réf. du contenant"
-#: templates/ishtar/sheet_operation.html:166
+#: templates/ishtar/sheet_operation.html:150
msgid "Warehouse"
msgstr "Dépôt"
-#: templates/ishtar/sheet_operation.html:189
+#: templates/ishtar/sheet_operation.html:173
msgid "No find associated to context record"
msgstr "Pas de mobilier associé à cette Unité d'Enregistrement"
-#: templates/ishtar/sheet_operation.html:192
+#: templates/ishtar/sheet_operation.html:176
msgid "No find associated to parcel"
msgstr "Pas de mobilier associé à cette parcelle"
-#: templates/ishtar/sheet_operation.html:192
+#: templates/ishtar/sheet_operation.html:176
msgid "(no context record)"
msgstr "(pas d'Unité d'Enregistrement)"
-#: templates/ishtar/sheet_operation.html:197
+#: templates/ishtar/sheet_operation.html:181
msgid "Documents from associated finds"
msgstr "Documents concernant le mobilier associé"
+#: templates/ishtar/blocks/window_tables/administrativacts.html:7
+msgid "Date"
+msgstr "Date"
+
+#: templates/ishtar/blocks/window_tables/administrativacts.html:16
+msgid "No administrative act associated"
+msgstr "Aucun acte administratif associé"
+
#: templates/ishtar/dashboards/dashboard_operation.html:11
msgid "Global informations"
msgstr "Informations générales"
@@ -1184,6 +1219,9 @@ msgstr "Coût FNAP"
msgid "Main towns by cost"
msgstr "Principales communes par coût"
+#~ msgid "No acts associated to this operation"
+#~ msgstr "Pas d'acte associé à cette opération"
+
#~ msgid "Scientific documentation"
#~ msgstr "Documentation scientifique"
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index bbffe023f..82567842f 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -391,10 +391,11 @@ class ActType(GeneralType):
ordering = ('label',)
class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter):
- TABLE_COLS = ['year', 'index', 'act_type', 'signature_date',
+ TABLE_COLS = ['full_ref', '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']
+ TABLE_COLS_FILE = ['full_ref', 'act_type', 'associated_file',
+ 'associated_file.towns',]
+ TABLE_COLS_OPE = ['full_ref', 'act_type', 'operation', '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"))
@@ -442,6 +443,18 @@ class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter):
for item in [self.operation, self.associated_file, self.act_object]
if item])
+ full_ref_lbl = _(u"Ref.")
+ @property
+ def full_ref(self):
+ lbl = []
+ if self.year:
+ lbl.append(unicode(self.year))
+ if self.index:
+ lbl.append(u"n°%d" %self.index)
+ if settings.COUNTRY == 'fr' and self.ref_sra:
+ lbl.append(u"[%s]" % self.ref_sra)
+ return u" ".join(lbl)
+
@property
def year(self):
if not self.signature_date:
@@ -485,7 +498,7 @@ class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter):
def save(self, *args, **kwargs):
if not self.act_type.indexed or not self.signature_date:
- super(AdministrativeAct, self).save(*args, **kwargs)
+ return super(AdministrativeAct, self).save(*args, **kwargs)
year = self.signature_date.year
if not self.index:
c_index = 1
diff --git a/archaeological_operations/templates/ishtar/blocks/window_tables/administrativacts.html b/archaeological_operations/templates/ishtar/blocks/window_tables/administrativacts.html
new file mode 100644
index 000000000..9feb51e72
--- /dev/null
+++ b/archaeological_operations/templates/ishtar/blocks/window_tables/administrativacts.html
@@ -0,0 +1,18 @@
+{% load i18n %}
+<table>
+ <caption>{{caption}}</caption>
+ <tr>
+ <th>{% trans "Ref." %}</th>
+ <th>{% trans "Type" %}</th>
+ <th>{% trans "Date" %}</th>
+ </tr>
+ {% for act in data %}
+ <tr>
+ <td>{{act.full_ref}}</td>
+ <td class='string'>{{act.act_type}}</td>
+ <td>{{act.signature_date}}</td>
+ </tr>
+ {% empty %}
+ <tr><td colspan="4" class='no_items'>{% trans "No administrative act associated" %}</td></tr>
+ {% endfor %}
+</table>
diff --git a/archaeological_operations/templates/ishtar/sheet_administrativeact.html b/archaeological_operations/templates/ishtar/sheet_administrativeact.html
index da80f6747..2cceb0222 100644
--- a/archaeological_operations/templates/ishtar/sheet_administrativeact.html
+++ b/archaeological_operations/templates/ishtar/sheet_administrativeact.html
@@ -11,6 +11,7 @@
<h3>{% trans "General"%}</h3>
<p><label>{%trans "Year:"%}</label> <span class='value strong'>{{ item.year }}</span></p>
{% if item.index %}<p><label>{%trans "Numerical reference:"%}</label> <span class='value strong'>{{ item.index }}</span></p>{% endif %}
+{% if item.ref_sra %}<p><label>{%trans "Internal reference:"%}</label> <span class='value strong'>{{ item.ref_sra }}</span></p>{% endif %}
<p><label>{%trans "Type:"%}</label> <span class='value'>{{ item.act_type }}</span></p>
<p><label>{%trans "Signature date:"%}</label> <span class='value'>{{ item.signature_date }}</span></p>
<p><label>{%trans "In charge:"%}</label> <span class='value'>{{ item.in_charge.full_label }}</span></p>
diff --git a/archaeological_operations/templates/ishtar/sheet_operation.html b/archaeological_operations/templates/ishtar/sheet_operation.html
index 9d9b845e3..b403d29df 100644
--- a/archaeological_operations/templates/ishtar/sheet_operation.html
+++ b/archaeological_operations/templates/ishtar/sheet_operation.html
@@ -1,5 +1,5 @@
{% extends "ishtar/sheet.html" %}
-{% load i18n window_tables %}
+{% load i18n window_tables window_ope_tables %}
{% block head_sheet %}
{{block.super}}
@@ -100,25 +100,8 @@
{% endfor %}
</table>
-<table>
- <caption>{%trans "Administrative acts"%}</caption>
- <tr>
- <th>{% trans "Year" %}</th>
- <th>{% trans "Ref." %}</th>
- <th>{% trans "Type" %}</th>
- <th>{% trans "Date" %}</th>
- </tr>
- {% for act in item.administrative_act.all %}
- <tr>
- <td>{{act.signature_date.year}}</td>
- <td>{% if act.ref_sra %}{{act.ref_sra}}{% endif %}</td>
- <td class='string'>{{act.act_type}}</td>
- <td class="string">{{act.signature_date}}</td>
- </tr>
- {% empty %}
- <tr><td colspan="4" class='no_items'>{% trans "No acts associated to this operation" %}</td></tr>
- {% endfor %}
-</table>
+{% trans "Administrativ acts" as administrativeacts_label %}
+{% table_administrativact administrativeacts_label item.administrative_act.all %}
{% trans "Document from this operation" as operation_docs %}
{% if item.source.count %} {% table_document operation_docs item.source.all %}{% endif %}
@@ -140,7 +123,7 @@
<td class='string'>{{ context_record.datings.all|join:", " }}</td>{# periods ?#}
<td class='string'>{{ context_record.description }}</td>
<td class='string'>{{ context_record.parcel.section }} - {{context_record.parcel.parcel_number}}</td>
- <td class='link'><a href="#" onclick='load_window("{%url show-contextrecord context_record.pk ''%}")'>{% trans "Details" %}</a></td>
+ <td class='link'><a href="#" class='display_details' onclick='load_window("{%url show-contextrecord context_record.pk ''%}")'>{% trans "Details" %}</a></td>
</tr>
{% empty %}
<tr><td colspan="6" class='no_items'>{% trans "No context record associated to this operation" %}</td></tr>
@@ -183,8 +166,8 @@
<td class="ref">{{ context_record.parcel.short_label }}</td>
<td class='ref'>{{ find.get_last_find.container.reference|default:""}}</td>
<td class='string'>{{ find.get_last_find.container.location|default:""}}</td>
- <td class='link'><a href="#">{% trans "Details" %}</a></td>
- {#<a href="#" onclick='load_window("{% url show-find find.pk%}");'>{%trans "Details"%}</a></td>#}
+ <td class='link'><a class='display_details' href="#">{% trans "Details" %}</a></td>
+ {#<a href="#" class='display_details' onclick='load_window("{% url show-find find.pk%}");'>{%trans "Details"%}</a></td>#}
</tr>
{% empty %}
<tr><td colspan="9" class='no_items'>{% trans "No find associated to context record" %} {{context_record.short_label}}</td></tr>
diff --git a/archaeological_operations/templatetags/__init__.py b/archaeological_operations/templatetags/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archaeological_operations/templatetags/__init__.py
diff --git a/archaeological_operations/templatetags/window_ope_tables.py b/archaeological_operations/templatetags/window_ope_tables.py
new file mode 100644
index 000000000..5576fe32d
--- /dev/null
+++ b/archaeological_operations/templatetags/window_ope_tables.py
@@ -0,0 +1,10 @@
+from django import template
+from django.utils.translation import ugettext as _
+import re
+
+register = template.Library()
+
+@register.inclusion_tag('ishtar/blocks/window_tables/administrativacts.html')
+def table_administrativact(caption, data):
+ return {'caption':caption, 'data':data}
+
diff --git a/archaeological_operations/urls.py b/archaeological_operations/urls.py
index 26dc5b3d0..17f232455 100644
--- a/archaeological_operations/urls.py
+++ b/archaeological_operations/urls.py
@@ -83,6 +83,12 @@ urlpatterns += patterns('archaeological_operations.views',
kwargs={'full':True}),
url(r'show-administrativeact(?:/(?P<pk>.+))?/(?P<type>.+)?$',
'show_administrativeact', name='show-administrativeact'),
+ # allow specialization for operations
+ url(r'show-administrativeact(?:/(?P<pk>.+))?/(?P<type>.+)?$',
+ 'show_administrativeact', name='show-administrativeactop'),
+ # allow specialization for files
+ url(r'show-administrativeact(?:/(?P<pk>.+))?/(?P<type>.+)?$',
+ 'show_administrativeact', name='show-administrativeactfile'),
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 7e5a64ab4..a957fe8c1 100644
--- a/archaeological_operations/views.py
+++ b/archaeological_operations/views.py
@@ -148,12 +148,14 @@ get_administrativeactop = get_item(models.AdministrativeAct,
'get_administrativeactop', 'administrativeactop',
extra_request_keys={'associated_file__towns':'associated_file__towns__pk',
'operation__towns':'operation__towns__pk',
- 'act_type__intented_to':'act_type__intented_to'},
+ 'act_type__intented_to':'act_type__intented_to',
+ 'year':'signature_date__year',
+ },
relative_session_names={'operation':'operation__pk'})
get_administrativeact = get_item(models.AdministrativeAct,
'get_administrativeact', 'administrativeact',
- extra_request_keys={})
+ extra_request_keys={'year':'signature_date__year',})
show_administrativeact = show_item(models.AdministrativeAct, 'administrativeact')
def dashboard_operation(request, *args, **kwargs):
diff --git a/archaeological_operations/wizards.py b/archaeological_operations/wizards.py
index d816cf9aa..6d25812eb 100644
--- a/archaeological_operations/wizards.py
+++ b/archaeological_operations/wizards.py
@@ -323,7 +323,7 @@ class OperationAdministrativeActWizard(OperationWizard):
r = r[k]
else:
break
- if level == len(keys): # the whole tree as been traversed
+ if level == len(keys): # the whole list as been traversed
# redirect to the generated doc
dct['redirect'] = reverse('generatedoc-administrativeactop',
args=[admact.pk, r[0]])