diff options
Diffstat (limited to 'archaeological_operations/views.py')
| -rw-r--r-- | archaeological_operations/views.py | 864 | 
1 files changed, 492 insertions, 372 deletions
| diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 86e5b7f52..51cedbc9c 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3  # -*- coding: utf-8 -*-  # Copyright (C) 2010-2017  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> @@ -31,94 +31,114 @@ from ishtar_common.utils import ugettext_lazy as _, pgettext_lazy  from archaeological_operations import models  from archaeological_operations import forms  from archaeological_operations import wizards -from ishtar_common.forms import ClosingDateFormSelection, FinalForm, \ -    FinalDeleteForm -from ishtar_common.models import get_current_profile, IshtarSiteProfile, \ -    DocumentTemplate +from ishtar_common.forms import ClosingDateFormSelection, FinalForm, FinalDeleteForm +from ishtar_common.models import ( +    get_current_profile, +    IshtarSiteProfile, +    DocumentTemplate, +)  from ishtar_common.utils import put_session_message, check_rights_condition -from ishtar_common.views import gen_generate_doc, QAItemEditForm, \ -    QABaseLockView, wizard_is_available, QAItemForm, IshtarMixin, \ -    LoginRequiredMixin -from ishtar_common.views_item import get_item, show_item, revert_item, \ -    new_qa_item +from ishtar_common.views import ( +    gen_generate_doc, +    QAItemEditForm, +    QABaseLockView, +    wizard_is_available, +    QAItemForm, +    IshtarMixin, +    LoginRequiredMixin, +) +from ishtar_common.views_item import get_item, show_item, revert_item, new_qa_item  from ishtar_common.wizards import SearchWizard  def autocomplete_patriarche(request): -    if (not request.user.has_perm('ishtar_common.view_operation', -                                  models.Operation) -            and not request.user.has_perm('ishtar_common.view_own_operation', -                                          models.Operation) -            and not request.user.ishtaruser.has_right( -                'operation_search', session=request.session)): -        return HttpResponse(content_type='text/plain') -    if not request.GET.get('term'): -        return HttpResponse(content_type='text/plain') -    q = request.GET.get('term') +    if ( +        not request.user.has_perm("ishtar_common.view_operation", models.Operation) +        and not request.user.has_perm( +            "ishtar_common.view_own_operation", models.Operation +        ) +        and not request.user.ishtaruser.has_right( +            "operation_search", session=request.session +        ) +    ): +        return HttpResponse(content_type="text/plain") +    if not request.GET.get("term"): +        return HttpResponse(content_type="text/plain") +    q = request.GET.get("term")      query = Q() -    for q in q.split(' '): +    for q in q.split(" "):          query &= Q(code_patriarche__startswith=q)      limit = 15 -    operations = models.Operation.objects\ -        .filter(query).order_by('code_patriarche')[:limit] -    data = json.dumps([{'id': operation.code_patriarche, -                        'value': operation.code_patriarche} -                       for operation in operations]) -    return HttpResponse(data, content_type='text/plain') +    operations = models.Operation.objects.filter(query).order_by("code_patriarche")[ +        :limit +    ] +    data = json.dumps( +        [ +            {"id": operation.code_patriarche, "value": operation.code_patriarche} +            for operation in operations +        ] +    ) +    return HttpResponse(data, content_type="text/plain")  def autocomplete_archaeologicalsite(request): -    if (not request.user.has_perm( -            'archaeological_operations.view_archaeologicalsite', -            models.ArchaeologicalSite) -        and not request.user.has_perm( -            'archaeological_operations.view_own_archaeologicalsite', -            models.ArchaeologicalSite)): -        return HttpResponse(content_type='text/plain') -    if not request.GET.get('term'): -        return HttpResponse(content_type='text/plain') -    q = request.GET.get('term') +    if not request.user.has_perm( +        "archaeological_operations.view_archaeologicalsite", models.ArchaeologicalSite +    ) and not request.user.has_perm( +        "archaeological_operations.view_own_archaeologicalsite", +        models.ArchaeologicalSite, +    ): +        return HttpResponse(content_type="text/plain") +    if not request.GET.get("term"): +        return HttpResponse(content_type="text/plain") +    q = request.GET.get("term")      query = Q() -    for q in q.split(' '): +    for q in q.split(" "):          qt = Q(reference__icontains=q) | Q(name__icontains=q)          query = query & qt      limit = 15 -    sites = models.ArchaeologicalSite.objects.filter( -        query).distinct().order_by('reference')[:limit] -    data = json.dumps([{'id': site.pk, -                        'value': str(site)[:60]} -                       for site in sites]) -    return HttpResponse(data, content_type='text/plain') +    sites = ( +        models.ArchaeologicalSite.objects.filter(query) +        .distinct() +        .order_by("reference")[:limit] +    ) +    data = json.dumps([{"id": site.pk, "value": str(site)[:60]} for site in sites]) +    return HttpResponse(data, content_type="text/plain")  new_archaeologicalsite = new_qa_item( -    models.ArchaeologicalSite, forms.ArchaeologicalSiteForm, many=True, -    page_name=_("New archaeological site") +    models.ArchaeologicalSite, +    forms.ArchaeologicalSiteForm, +    many=True, +    page_name=_("New archaeological site"),  )  def autocomplete_operation(request):      # person_types = request.user.ishtaruser.person.person_type -    if (not request.user.has_perm('ishtar_common.view_operation', -                                  models.Operation) +    if ( +        not request.user.has_perm("ishtar_common.view_operation", models.Operation)          and not request.user.has_perm( -            'ishtar_common.view_own_operation', models.Operation) -            and not request.user.ishtaruser.has_right( -                'operation_search', session=request.session)): -        return HttpResponse(content_type='text/plain') -    if not request.GET.get('term'): -        return HttpResponse(content_type='text/plain') -    q = request.GET.get('term') +            "ishtar_common.view_own_operation", models.Operation +        ) +        and not request.user.ishtaruser.has_right( +            "operation_search", session=request.session +        ) +    ): +        return HttpResponse(content_type="text/plain") +    if not request.GET.get("term"): +        return HttpResponse(content_type="text/plain") +    q = request.GET.get("term")      query = Q() -    for q in q.split(' '): +    for q in q.split(" "):          extra = Q(towns__name__icontains=q) | Q(common_name__icontains=q)          try:              int(q)              extra = extra | Q(year=q) | Q(operation_code=q)          except ValueError:              pass -        if settings.COUNTRY == 'fr': -            if q.startswith('OA'): +        if settings.COUNTRY == "fr": +            if q.startswith("OA"):                  q = q[2:]              try:                  int(q) @@ -128,80 +148,89 @@ def autocomplete_operation(request):          query = query & extra      limit = 15      operations = models.Operation.objects.filter(query).distinct()[:limit] -    data = json.dumps([{'id': operation.pk, 'value': str(operation)} -                       for operation in operations]) -    return HttpResponse(data, content_type='text/plain') +    data = json.dumps( +        [{"id": operation.pk, "value": str(operation)} for operation in operations] +    ) +    return HttpResponse(data, content_type="text/plain")  def get_available_operation_code(request, year=None):      if not request.user.has_perm( -        'ishtar_common.view_operation', models.Operation)\ -        and not request.user.has_perm( -            'ishtar_common.view_own_operation', models.Operation): -        return HttpResponse(content_type='text/plain') -    data = json.dumps({'id': -                       models.Operation.get_available_operation_code(year)}) -    return HttpResponse(data, content_type='text/plain') +        "ishtar_common.view_operation", models.Operation +    ) and not request.user.has_perm( +        "ishtar_common.view_own_operation", models.Operation +    ): +        return HttpResponse(content_type="text/plain") +    data = json.dumps({"id": models.Operation.get_available_operation_code(year)}) +    return HttpResponse(data, content_type="text/plain") -get_operation = get_item(models.Operation, 'get_operation', 'operation', -                         search_form=forms.OperationSelect) +get_operation = get_item( +    models.Operation, "get_operation", "operation", search_form=forms.OperationSelect +) -show_operation = show_item(models.Operation, 'operation') +show_operation = show_item(models.Operation, "operation")  revert_operation = revert_item(models.Operation)  get_administrativeactop = get_item( -    models.AdministrativeAct, 'get_administrativeactop', 'administrativeactop', -    base_request={"operation__pk__isnull": False}) +    models.AdministrativeAct, +    "get_administrativeactop", +    "administrativeactop", +    base_request={"operation__pk__isnull": False}, +)  get_administrativeact = get_item( -    models.AdministrativeAct, 'get_administrativeact', 'administrativeact') +    models.AdministrativeAct, "get_administrativeact", "administrativeact" +) -show_administrativeact = show_item(models.AdministrativeAct, -                                   'administrativeact') +show_administrativeact = show_item(models.AdministrativeAct, "administrativeact")  def dashboard_operation(request, *args, **kwargs):      """      Operation dashboard      """ -    dct = {'dashboard': models.OperationDashboard()} -    return render(request, 'ishtar/dashboards/dashboard_operation.html', dct) +    dct = {"dashboard": models.OperationDashboard()} +    return render(request, "ishtar/dashboards/dashboard_operation.html", dct)  operation_search_wizard = wizards.OperationSearch.as_view( -    [('general-operation_search', forms.OperationFormSelection)], +    [("general-operation_search", forms.OperationFormSelection)],      label=_("Operation search"), -    url_name='operation_search',) +    url_name="operation_search", +)  wizard_steps = [ -    ('filechoice-operation_creation', forms.OperationFormFileChoice), -    ('general-operation_creation', forms.OperationFormGeneral), -    ('judiciary-operation_creation', forms.CourtOrderedSeizureForm), -    ('collaborators-operation_creation', forms.CollaboratorForm), -    ('archaeologicalsite-operation_creation', forms.ArchaeologicalSiteFormSet), -    ('preventive-operation_creation', forms.OperationFormPreventive), -    ('preventivediag-operation_creation', forms.OperationFormPreventiveDiag), -    ('townsgeneral-operation_creation', forms.TownFormset), -    ('towns-operation_creation', forms.SelectedTownFormset), -    ('parcelsgeneral-operation_creation', forms.SelectedParcelGeneralFormSet), -    ('parcels-operation_creation', forms.SelectedParcelFormSet), -    ('remains-operation_creation', forms.RemainForm), -    ('periods-operation_creation', forms.PeriodForm), -    ('relations-operation_creation', forms.RecordRelationsFormSet), -    ('abstract-operation_creation', forms.OperationFormAbstract), -    ('final-operation_creation', FinalForm)] +    ("filechoice-operation_creation", forms.OperationFormFileChoice), +    ("general-operation_creation", forms.OperationFormGeneral), +    ("judiciary-operation_creation", forms.CourtOrderedSeizureForm), +    ("collaborators-operation_creation", forms.CollaboratorForm), +    ("archaeologicalsite-operation_creation", forms.ArchaeologicalSiteFormSet), +    ("preventive-operation_creation", forms.OperationFormPreventive), +    ("preventivediag-operation_creation", forms.OperationFormPreventiveDiag), +    ("townsgeneral-operation_creation", forms.TownFormset), +    ("towns-operation_creation", forms.SelectedTownFormset), +    ("parcelsgeneral-operation_creation", forms.SelectedParcelGeneralFormSet), +    ("parcels-operation_creation", forms.SelectedParcelFormSet), +    ("remains-operation_creation", forms.RemainForm), +    ("periods-operation_creation", forms.PeriodForm), +    ("relations-operation_creation", forms.RecordRelationsFormSet), +    ("abstract-operation_creation", forms.OperationFormAbstract), +    ("final-operation_creation", FinalForm), +]  def get_check_files_for_operation(other_check=None):      def func(self): -        if not get_current_profile().files or \ -                not check_rights_condition(['view_file'])(self): +        if not get_current_profile().files or not check_rights_condition(["view_file"])( +            self +        ):              return False          if not other_check:              return True          return other_check(self) +      return func @@ -209,378 +238,456 @@ check_files_for_operation = get_check_files_for_operation()  ope_crea_condition_dict = { -    'filechoice-operation_creation': check_files_for_operation, -    'judiciary-operation_creation': wizards.is_judiciary( -        'general-operation_creation', models.OperationType, 'operation_type', +    "filechoice-operation_creation": check_files_for_operation, +    "judiciary-operation_creation": wizards.is_judiciary( +        "general-operation_creation", +        models.OperationType, +        "operation_type", +    ), +    "preventive-operation_creation": get_check_files_for_operation( +        wizards.is_preventive( +            "general-operation_creation", +            models.OperationType, +            "operation_type", +            "prev_excavation", +        ) +    ), +    "preventivediag-operation_creation": get_check_files_for_operation( +        wizards.is_preventive( +            "general-operation_creation", +            models.OperationType, +            "operation_type", +            "arch_diagnostic", +        ) +    ), +    "townsgeneral-operation_creation": wizards.has_associated_file( +        "filechoice-operation_creation", negate=True +    ), +    "towns-operation_creation": wizards.has_associated_file( +        "filechoice-operation_creation" +    ), +    "parcelsgeneral-operation_creation": wizards.has_associated_file( +        "filechoice-operation_creation", negate=True +    ), +    "parcels-operation_creation": wizards.has_associated_file( +        "filechoice-operation_creation"      ), -    'preventive-operation_creation': -    get_check_files_for_operation( -        wizards.is_preventive('general-operation_creation', -                              models.OperationType, 'operation_type', -                              'prev_excavation')), -    'preventivediag-operation_creation': -    get_check_files_for_operation( -        wizards.is_preventive('general-operation_creation', -                              models.OperationType, 'operation_type', -                              'arch_diagnostic')), -    'townsgeneral-operation_creation': wizards.has_associated_file( -        'filechoice-operation_creation', negate=True), -    'towns-operation_creation': wizards.has_associated_file( -        'filechoice-operation_creation'), -    'parcelsgeneral-operation_creation': wizards.has_associated_file( -        'filechoice-operation_creation', negate=True), -    'parcels-operation_creation': wizards.has_associated_file( -        'filechoice-operation_creation'),  }  operation_creation_wizard = wizards.OperationWizard.as_view(      wizard_steps,      label=_("New operation"),      condition_dict=ope_crea_condition_dict, -    url_name='operation_creation',) +    url_name="operation_creation", +)  operation_modif_wizard_steps = [ -    ('selec-operation_modification', forms.OperationFormSelection), -    ('general-operation_modification', forms.OperationFormModifGeneral), -    ('judiciary-operation_modification', forms.CourtOrderedSeizureForm), -    ('collaborators-operation_modification', forms.CollaboratorForm), -    ('archaeologicalsite-operation_modification', forms.ArchaeologicalSiteFormSet), -    ('preventive-operation_modification', forms.OperationFormPreventive), -    ('preventivediag-operation_modification', forms.OperationFormPreventiveDiag), -    ('towns-operation_modification', forms.SelectedTownFormset), -    ('townsgeneral-operation_modification', forms.TownFormset), -    ('parcels-operation_modification', forms.SelectedParcelFormSet), -    ('parcelsgeneral-operation_modification', forms.SelectedParcelGeneralFormSet), -    ('remains-operation_modification', forms.RemainForm), -    ('periods-operation_modification', forms.PeriodForm), -    ('relations-operation_modification', forms.RecordRelationsFormSet), -    ('abstract-operation_modification', forms.OperationFormAbstract), -    ('final-operation_modification', FinalForm) +    ("selec-operation_modification", forms.OperationFormSelection), +    ("general-operation_modification", forms.OperationFormModifGeneral), +    ("judiciary-operation_modification", forms.CourtOrderedSeizureForm), +    ("collaborators-operation_modification", forms.CollaboratorForm), +    ("archaeologicalsite-operation_modification", forms.ArchaeologicalSiteFormSet), +    ("preventive-operation_modification", forms.OperationFormPreventive), +    ("preventivediag-operation_modification", forms.OperationFormPreventiveDiag), +    ("towns-operation_modification", forms.SelectedTownFormset), +    ("townsgeneral-operation_modification", forms.TownFormset), +    ("parcels-operation_modification", forms.SelectedParcelFormSet), +    ("parcelsgeneral-operation_modification", forms.SelectedParcelGeneralFormSet), +    ("remains-operation_modification", forms.RemainForm), +    ("periods-operation_modification", forms.PeriodForm), +    ("relations-operation_modification", forms.RecordRelationsFormSet), +    ("abstract-operation_modification", forms.OperationFormAbstract), +    ("final-operation_modification", FinalForm),  ]  ope_modif_condition_dict = { -    'preventive-operation_modification': -    get_check_files_for_operation( -        wizards.is_preventive('general-operation_modification', -                              models.OperationType, 'operation_type', -                              'prev_excavation')), -    'preventivediag-operation_modification': -    get_check_files_for_operation( -        wizards.is_preventive('general-operation_modification', -                              models.OperationType, 'operation_type', -                              'arch_diagnostic')), -    'judiciary-operation_modification': wizards.is_judiciary( -        'general-operation_modification', models.OperationType, 'operation_type', +    "preventive-operation_modification": get_check_files_for_operation( +        wizards.is_preventive( +            "general-operation_modification", +            models.OperationType, +            "operation_type", +            "prev_excavation", +        ) +    ), +    "preventivediag-operation_modification": get_check_files_for_operation( +        wizards.is_preventive( +            "general-operation_modification", +            models.OperationType, +            "operation_type", +            "arch_diagnostic", +        ) +    ), +    "judiciary-operation_modification": wizards.is_judiciary( +        "general-operation_modification", +        models.OperationType, +        "operation_type", +    ), +    "townsgeneral-operation_modification": wizards.has_associated_file( +        "general-operation_modification", negate=True +    ), +    "towns-operation_modification": wizards.has_associated_file( +        "general-operation_modification" +    ), +    "parcelsgeneral-operation_modification": wizards.has_associated_file( +        "general-operation_modification", negate=True +    ), +    "parcels-operation_modification": wizards.has_associated_file( +        "general-operation_modification"      ), -    'townsgeneral-operation_modification': wizards.has_associated_file( -        'general-operation_modification', negate=True), -    'towns-operation_modification': wizards.has_associated_file( -        'general-operation_modification'), -    'parcelsgeneral-operation_modification': wizards.has_associated_file( -        'general-operation_modification', negate=True), -    'parcels-operation_modification': wizards.has_associated_file( -        'general-operation_modification'), -  }  operation_modification_wizard = wizards.OperationModificationWizard.as_view(      operation_modif_wizard_steps,      label=_("Operation modification"),      condition_dict=ope_modif_condition_dict, -    url_name='operation_modification',) +    url_name="operation_modification", +)  def operation_modify(request, pk): -    if not wizard_is_available(operation_modification_wizard, request, -                               models.Operation, pk): +    if not wizard_is_available( +        operation_modification_wizard, request, models.Operation, pk +    ):          return HttpResponseRedirect("/") -    wizard_url = 'operation_modification' +    wizard_url = "operation_modification"      wizards.OperationModificationWizard.session_set_value( -        request, 'selec-' + wizard_url, 'pk', pk, reset=True) -    return redirect(reverse(wizard_url, -                            kwargs={'step': 'general-' + wizard_url})) +        request, "selec-" + wizard_url, "pk", pk, reset=True +    ) +    return redirect(reverse(wizard_url, kwargs={"step": "general-" + wizard_url}))  def operation_add(request, file_id):      operation_creation_wizard(request)      wizards.OperationWizard.session_set_value( -        request, 'filechoice-operation_creation', 'associated_file', -        file_id, reset=True) -    return redirect(reverse('operation_creation', -                            kwargs={'step': 'general-operation_creation'})) +        request, "filechoice-operation_creation", "associated_file", file_id, reset=True +    ) +    return redirect( +        reverse("operation_creation", kwargs={"step": "general-operation_creation"}) +    ) +  operation_closing_steps = [ -    ('selec-operation_closing', forms.OperationFormSelection), -    ('date-operation_closing', ClosingDateFormSelection), -    ('final-operation_closing', forms.FinalOperationClosingForm)] +    ("selec-operation_closing", forms.OperationFormSelection), +    ("date-operation_closing", ClosingDateFormSelection), +    ("final-operation_closing", forms.FinalOperationClosingForm), +]  operation_closing_wizard = wizards.OperationClosingWizard.as_view(      operation_closing_steps,      label=_("Operation closing"), -    url_name='operation_closing',) +    url_name="operation_closing", +)  operation_deletion_steps = [ -    ('selec-operation_deletion', forms.OperationFormMultiSelection), -    ('final-operation_deletion', forms.OperationDeletionForm) +    ("selec-operation_deletion", forms.OperationFormMultiSelection), +    ("final-operation_deletion", forms.OperationDeletionForm),  ]  operation_deletion_wizard = wizards.OperationDeletionWizard.as_view(      operation_deletion_steps,      label=_("Operation deletion"), -    url_name='operation_deletion',) +    url_name="operation_deletion", +)  def operation_delete(request, pk): -    if not wizard_is_available(operation_deletion_wizard, request, -                               models.Operation, pk): +    if not wizard_is_available( +        operation_deletion_wizard, request, models.Operation, pk +    ):          return HttpResponseRedirect("/") -    wizard_url = 'operation_deletion' +    wizard_url = "operation_deletion"      wizards.OperationDeletionWizard.session_set_value( -        request, 'selec-' + wizard_url, 'pks', pk, reset=True) -    return redirect(reverse(wizard_url, -                            kwargs={'step': 'final-' + wizard_url})) +        request, "selec-" + wizard_url, "pks", pk, reset=True +    ) +    return redirect(reverse(wizard_url, kwargs={"step": "final-" + wizard_url}))  # archaeological sites +  def site_extra_context(request, item): -    return {'SITE_LABEL': IshtarSiteProfile.get_default_site_label()} +    return {"SITE_LABEL": IshtarSiteProfile.get_default_site_label()} -get_site = get_item(models.ArchaeologicalSite, 'get_site', 'site', -                    search_form=forms.SiteSelect) -show_site = show_item( -    models.ArchaeologicalSite, 'site', -    extra_dct=site_extra_context +get_site = get_item( +    models.ArchaeologicalSite, "get_site", "site", search_form=forms.SiteSelect  ) +show_site = show_item(models.ArchaeologicalSite, "site", extra_dct=site_extra_context)  revert_site = revert_item(models.ArchaeologicalSite)  site_search_wizard = wizards.SiteSearch.as_view( -    [('general-site_search', forms.SiteFormSelection)], -    url_name='site_search', +    [("general-site_search", forms.SiteFormSelection)], +    url_name="site_search",  )  site_creation_steps = [ -    ('general-site_creation', forms.SiteForm), -    ('towns-site_creation', forms.SiteTownFormset), -    ('underwater-site_creation', forms.SiteUnderwaterForm), -    ('final-site_creation', FinalForm) +    ("general-site_creation", forms.SiteForm), +    ("towns-site_creation", forms.SiteTownFormset), +    ("underwater-site_creation", forms.SiteUnderwaterForm), +    ("final-site_creation", FinalForm),  ]  site_creation_wizard = wizards.SiteWizard.as_view(      site_creation_steps, -    condition_dict={'underwater-site_creation': forms.check_underwater_module}, -    url_name='site_creation', +    condition_dict={"underwater-site_creation": forms.check_underwater_module}, +    url_name="site_creation",  )  site_modification_steps = [ -    ('selec-site_modification', forms.SiteFormSelection), -    ('general-site_modification', forms.SiteForm), -    ('towns-site_modification', forms.SiteTownFormset), -    ('underwater-site_modification', forms.SiteUnderwaterForm), -    ('final-site_modification', FinalForm) +    ("selec-site_modification", forms.SiteFormSelection), +    ("general-site_modification", forms.SiteForm), +    ("towns-site_modification", forms.SiteTownFormset), +    ("underwater-site_modification", forms.SiteUnderwaterForm), +    ("final-site_modification", FinalForm),  ]  site_modification_wizard = wizards.SiteModificationWizard.as_view(      site_modification_steps, -    condition_dict={ -        'underwater-site_modification': forms.check_underwater_module}, -    url_name='site_modification', +    condition_dict={"underwater-site_modification": forms.check_underwater_module}, +    url_name="site_modification",  )  def site_modify(request, pk): -    if not wizard_is_available(site_modification_wizard, request, -                               models.ArchaeologicalSite, pk): +    if not wizard_is_available( +        site_modification_wizard, request, models.ArchaeologicalSite, pk +    ):          return HttpResponseRedirect("/") -    wizard_url = 'site_modification' +    wizard_url = "site_modification"      wizards.SiteModificationWizard.session_set_value( -        request, 'selec-' + wizard_url, 'pk', pk, reset=True) -    return redirect(reverse(wizard_url, -                            kwargs={'step': 'general-' + wizard_url})) +        request, "selec-" + wizard_url, "pk", pk, reset=True +    ) +    return redirect(reverse(wizard_url, kwargs={"step": "general-" + wizard_url}))  site_deletion_steps = [ -    ('selec-site_deletion', forms.SiteFormMultiSelection), -    ('final-site_deletion', FinalDeleteForm) +    ("selec-site_deletion", forms.SiteFormMultiSelection), +    ("final-site_deletion", FinalDeleteForm),  ]  site_deletion_wizard = wizards.SiteDeletionWizard.as_view(      site_deletion_steps,      label=_("Site deletion"), -    url_name='site_deletion',) +    url_name="site_deletion", +)  def site_delete(request, pk): -    if not wizard_is_available(site_deletion_wizard, request, -                               models.ArchaeologicalSite, pk): +    if not wizard_is_available( +        site_deletion_wizard, request, models.ArchaeologicalSite, pk +    ):          return HttpResponseRedirect("/") -    wizard_url = 'site_deletion' +    wizard_url = "site_deletion"      wizards.SiteDeletionWizard.session_set_value( -        request, 'selec-' + wizard_url, 'pks', pk, reset=True) -    return redirect(reverse(wizard_url, -                            kwargs={'step': 'final-' + wizard_url})) - -operation_administrativeactop_search_wizard = wizards.SearchWizard.as_view([ -    ('general-operation_administrativeactop_search', -     forms.AdministrativeActOpeFormSelection)], +        request, "selec-" + wizard_url, "pks", pk, reset=True +    ) +    return redirect(reverse(wizard_url, kwargs={"step": "final-" + wizard_url})) + + +operation_administrativeactop_search_wizard = wizards.SearchWizard.as_view( +    [ +        ( +            "general-operation_administrativeactop_search", +            forms.AdministrativeActOpeFormSelection, +        ) +    ],      label=_("Administrative act search"), -    url_name='operation_administrativeactop_search',) +    url_name="operation_administrativeactop_search", +)  administrativeactop_steps = [ -    ('selec-operation_administrativeactop', forms.OperationFormSelection), -    ('administrativeact-operation_administrativeactop', -     forms.AdministrativeActOpeForm), -    ('final-operation_administrativeactop', FinalForm)] - - -operation_administrativeactop_wizard = \ -    wizards.OperationAdministrativeActWizard.as_view( -        administrativeactop_steps, -        label=_("Operation: new administrative act"), -        url_name='operation_administrativeactop',) - -operation_administrativeactop_modification_wizard = \ -    wizards.OperationEditAdministrativeActWizard.as_view([ -        ('selec-operation_administrativeactop_modification', -         forms.AdministrativeActOpeFormSelection), -        ('administrativeact-operation_administrativeactop_modification', -         forms.AdministrativeActOpeModifForm), -        ('final-operation_administrativeactop_modification', FinalForm)], +    ("selec-operation_administrativeactop", forms.OperationFormSelection), +    ("administrativeact-operation_administrativeactop", forms.AdministrativeActOpeForm), +    ("final-operation_administrativeactop", FinalForm), +] + + +operation_administrativeactop_wizard = wizards.OperationAdministrativeActWizard.as_view( +    administrativeactop_steps, +    label=_("Operation: new administrative act"), +    url_name="operation_administrativeactop", +) + +operation_administrativeactop_modification_wizard = ( +    wizards.OperationEditAdministrativeActWizard.as_view( +        [ +            ( +                "selec-operation_administrativeactop_modification", +                forms.AdministrativeActOpeFormSelection, +            ), +            ( +                "administrativeact-operation_administrativeactop_modification", +                forms.AdministrativeActOpeModifForm, +            ), +            ("final-operation_administrativeactop_modification", FinalForm), +        ],          label=_("Operation: administrative act modification"), -        url_name='operation_administrativeactop_modification',) +        url_name="operation_administrativeactop_modification", +    ) +)  def operation_administrativeactop_modify(request, pk):      if not wizard_is_available( -            operation_administrativeactop_modification_wizard, request, -            models.AdministrativeAct, pk): +        operation_administrativeactop_modification_wizard, +        request, +        models.AdministrativeAct, +        pk, +    ):          return HttpResponseRedirect("/") -    wizard_url = 'operation_administrativeactop_modification' +    wizard_url = "operation_administrativeactop_modification"      wizards.OperationEditAdministrativeActWizard.session_set_value( -        request, 'selec-' + wizard_url, 'pk', pk, reset=True) +        request, "selec-" + wizard_url, "pk", pk, reset=True +    )      return redirect( -        reverse(wizard_url, kwargs={'step': 'administrativeact-' + wizard_url})) - - -operation_administrativeactop_deletion_wizard = \ -    wizards.AdministrativeActDeletionWizard.as_view([ -        ('selec-operation_administrativeactop_deletion', -         forms.AdministrativeActOpeFormSelection), -        ('final-operation_administrativeactop_deletion', -         forms.FinalAdministrativeActDeleteForm)], +        reverse(wizard_url, kwargs={"step": "administrativeact-" + wizard_url}) +    ) + + +operation_administrativeactop_deletion_wizard = ( +    wizards.AdministrativeActDeletionWizard.as_view( +        [ +            ( +                "selec-operation_administrativeactop_deletion", +                forms.AdministrativeActOpeFormSelection, +            ), +            ( +                "final-operation_administrativeactop_deletion", +                forms.FinalAdministrativeActDeleteForm, +            ), +        ],          label=_("Operation: administrative act deletion"), -        url_name='operation_administrativeactop_deletion',) +        url_name="operation_administrativeactop_deletion", +    ) +)  def operation_administrativeactop_delete(request, pk):      if not wizard_is_available( -            operation_administrativeactop_deletion_wizard, request, -            models.AdministrativeAct, pk): +        operation_administrativeactop_deletion_wizard, +        request, +        models.AdministrativeAct, +        pk, +    ):          return HttpResponseRedirect("/") -    wizard_url = 'operation_administrativeactop_deletion' +    wizard_url = "operation_administrativeactop_deletion"      wizards.AdministrativeActDeletionWizard.session_set_value( -        request, 'selec-' + wizard_url, 'pk', pk, reset=True) -    return redirect( -        reverse(wizard_url, kwargs={'step': 'final-' + wizard_url})) - - -administrativact_register_wizard = SearchWizard.as_view([ -    ('general-administrativact_register', -     forms.AdministrativeActRegisterFormSelection)], -    label=pgettext_lazy('admin act register', "Register"), -    url_name='administrativact_register',) +        request, "selec-" + wizard_url, "pk", pk, reset=True +    ) +    return redirect(reverse(wizard_url, kwargs={"step": "final-" + wizard_url})) + + +administrativact_register_wizard = SearchWizard.as_view( +    [ +        ( +            "general-administrativact_register", +            forms.AdministrativeActRegisterFormSelection, +        ) +    ], +    label=pgettext_lazy("admin act register", "Register"), +    url_name="administrativact_register", +)  generatedoc_administrativeactop = gen_generate_doc(models.AdministrativeAct)  def administrativeactfile_document( -        request, file=False, treatment=False, treatment_file=False): +    request, file=False, treatment=False, treatment_file=False +):      search_form = forms.AdministrativeActOpeFormSelection -    document_type = 'O' +    document_type = "O"      if file: -        from archaeological_files.forms import \ -            AdministrativeActFileFormSelection +        from archaeological_files.forms import AdministrativeActFileFormSelection +          search_form = AdministrativeActFileFormSelection -        document_type = 'F' +        document_type = "F"      elif treatment: -        from archaeological_finds.forms import \ -            AdministrativeActTreatmentFormSelection +        from archaeological_finds.forms import AdministrativeActTreatmentFormSelection +          search_form = AdministrativeActTreatmentFormSelection -        document_type = 'T' +        document_type = "T"      elif treatment_file: -        from archaeological_finds.forms import \ -            AdministrativeActTreatmentFileFormSelection +        from archaeological_finds.forms import ( +            AdministrativeActTreatmentFileFormSelection, +        ) +          search_form = AdministrativeActTreatmentFileFormSelection -        document_type = 'TF' +        document_type = "TF" -    if not request.user.has_perm('view_administrativeact', -                                 models.AdministrativeAct): -        return HttpResponse(content_type='text/plain') +    if not request.user.has_perm("view_administrativeact", models.AdministrativeAct): +        return HttpResponse(content_type="text/plain")      dct = {}      DocumentGenerationAdminActForm = forms.DocumentGenerationAdminActForm      if request.POST: -        dct['search_form'] = search_form(request.POST) -        dct['template_form'] = DocumentGenerationAdminActForm( -            document_type=document_type) +        dct["search_form"] = search_form(request.POST) +        dct["template_form"] = DocumentGenerationAdminActForm( +            document_type=document_type +        )          c_object = None          try: -            if dct['search_form'].is_valid(): -                c_object = \ -                    DocumentGenerationAdminActForm._associated_model\ -                    .objects.get(pk=dct['search_form'].cleaned_data.get('pk')) +            if dct["search_form"].is_valid(): +                c_object = DocumentGenerationAdminActForm._associated_model.objects.get( +                    pk=dct["search_form"].cleaned_data.get("pk") +                )          except DocumentGenerationAdminActForm._associated_model.DoesNotExist:              pass          if c_object: -            dct['template_form'] = DocumentGenerationAdminActForm( -                request.POST, document_type=document_type, obj=c_object) -            if dct['template_form'].is_valid(): +            dct["template_form"] = DocumentGenerationAdminActForm( +                request.POST, document_type=document_type, obj=c_object +            ) +            if dct["template_form"].is_valid():                  try:                      return generatedoc_administrativeactop(                          request, -                        dct['search_form'].cleaned_data.get('pk'), -                        dct['template_form'].cleaned_data.get( -                            'document_template')) +                        dct["search_form"].cleaned_data.get("pk"), +                        dct["template_form"].cleaned_data.get("document_template"), +                    )                  except TemplateSyntaxError: -                    dct['search_form'] = search_form() +                    dct["search_form"] = search_form()                      try: -                        template = DocumentTemplate.objects.get(pk=dct[ -                            'template_form'].cleaned_data.get( -                                'document_template')).name +                        template = DocumentTemplate.objects.get( +                            pk=dct["template_form"].cleaned_data.get( +                                "document_template" +                            ) +                        ).name                      except DocumentTemplate.DoesNotExist:                          template = "" -                    dct['template_form'] = DocumentGenerationAdminActForm( -                        document_type=document_type) -                    dct['template_error'] = str(_( -                        "Syntax error on the source template \"{}\" - " -                        "contact your administrator and ask him to check " -                        "the syntax of this document.")).format(template) +                    dct["template_form"] = DocumentGenerationAdminActForm( +                        document_type=document_type +                    ) +                    dct["template_error"] = str( +                        _( +                            'Syntax error on the source template "{}" - ' +                            "contact your administrator and ask him to check " +                            "the syntax of this document." +                        ) +                    ).format(template)      else: -        dct['search_form'] = search_form() -        dct['template_form'] = DocumentGenerationAdminActForm( -            document_type=document_type) -    return render(request, 'ishtar/administrativeact_document.html', dct) +        dct["search_form"] = search_form() +        dct["template_form"] = DocumentGenerationAdminActForm( +            document_type=document_type +        ) +    return render(request, "ishtar/administrativeact_document.html", dct)  def autocomplete_administrativeact(request): -    if (not request.user.has_perm( -            'archaeological_operations.view_administrativeact', -            models.AdministrativeAct) -            and not request.user.has_perm( -                'archaeological_operations.view_own_administrativeact', -                models.AdministrativeAct)): -        return HttpResponse(content_type='text/plain') -    if not request.GET.get('term'): -        return HttpResponse(content_type='text/plain') -    q = request.GET.get('term') +    if not request.user.has_perm( +        "archaeological_operations.view_administrativeact", models.AdministrativeAct +    ) and not request.user.has_perm( +        "archaeological_operations.view_own_administrativeact", models.AdministrativeAct +    ): +        return HttpResponse(content_type="text/plain") +    if not request.GET.get("term"): +        return HttpResponse(content_type="text/plain") +    q = request.GET.get("term")      query = Q() -    for q in q.split(' '): +    for q in q.split(" "):          qt = Q(act_type__label__icontains=q) | Q(towns_label=q)          try:              if len(q) == 4: @@ -590,25 +697,33 @@ def autocomplete_administrativeact(request):              pass          query = query & qt      limit = 15 -    items = models.AdministrativeAct.objects.filter( -        query).order_by('year', 'index').distinct()[:limit] -    data = json.dumps([{'id': item.pk, 'value': str(item)[:80] + " (...)"} -                       for item in items]) -    return HttpResponse(data, content_type='text/plain') +    items = ( +        models.AdministrativeAct.objects.filter(query) +        .order_by("year", "index") +        .distinct()[:limit] +    ) +    data = json.dumps( +        [{"id": item.pk, "value": str(item)[:80] + " (...)"} for item in items] +    ) +    return HttpResponse(data, content_type="text/plain")  def reset_wizards(request):      for wizard_class, url_name in ( -            (wizards.OperationWizard, 'operation_creation'), -            (wizards.OperationModificationWizard, 'operation_modification'), -            (wizards.OperationClosingWizard, 'operation_closing'), -            (wizards.OperationDeletionWizard, 'operation_deletion_wizard'), -            (wizards.OperationAdministrativeActWizard, -             'operation_administrativeactop'), -            (wizards.OperationEditAdministrativeActWizard, -             'operation_administrativeactop_modification'), -            (wizards.AdministrativeActDeletionWizard, -             'operation_administrativeactop_deletion'),): +        (wizards.OperationWizard, "operation_creation"), +        (wizards.OperationModificationWizard, "operation_modification"), +        (wizards.OperationClosingWizard, "operation_closing"), +        (wizards.OperationDeletionWizard, "operation_deletion_wizard"), +        (wizards.OperationAdministrativeActWizard, "operation_administrativeactop"), +        ( +            wizards.OperationEditAdministrativeActWizard, +            "operation_administrativeactop_modification", +        ), +        ( +            wizards.AdministrativeActDeletionWizard, +            "operation_administrativeactop_deletion", +        ), +    ):          wizard_class.session_reset(request, url_name) @@ -628,7 +743,7 @@ class QASiteLockView(QABaseLockView):  class QAOperationdDuplicateFormView(QAItemForm): -    template_name = 'ishtar/forms/qa_operation_duplicate.html' +    template_name = "ishtar/forms/qa_operation_duplicate.html"      model = models.Operation      page_name = _("Duplicate")      form_class = forms.QAOperationDuplicateForm @@ -636,7 +751,7 @@ class QAOperationdDuplicateFormView(QAItemForm):      def get_form_kwargs(self):          kwargs = super(QAOperationdDuplicateFormView, self).get_form_kwargs() -        kwargs['user'] = self.request.user +        kwargs["user"] = self.request.user          return kwargs      def form_valid(self, form): @@ -644,23 +759,21 @@ class QAOperationdDuplicateFormView(QAItemForm):          return HttpResponseRedirect(reverse("success"))      def get_context_data(self, **kwargs): -        data = super(QAOperationdDuplicateFormView, self).get_context_data( -            **kwargs) -        data['action_name'] = _("Duplicate") +        data = super(QAOperationdDuplicateFormView, self).get_context_data(**kwargs) +        data["action_name"] = _("Duplicate")          return data  class QAArchaeologicalSiteDuplicateFormView(QAItemForm): -    template_name = 'ishtar/forms/qa_site_duplicate.html' +    template_name = "ishtar/forms/qa_site_duplicate.html"      model = models.ArchaeologicalSite      page_name = _("Duplicate")      form_class = forms.QAArchaeologicalSiteDuplicateForm      base_url = "site-qa-duplicate"      def get_form_kwargs(self): -        kwargs = super(QAArchaeologicalSiteDuplicateFormView, -                       self).get_form_kwargs() -        kwargs['user'] = self.request.user +        kwargs = super(QAArchaeologicalSiteDuplicateFormView, self).get_form_kwargs() +        kwargs["user"] = self.request.user          return kwargs      def form_valid(self, form): @@ -668,9 +781,10 @@ class QAArchaeologicalSiteDuplicateFormView(QAItemForm):          return HttpResponseRedirect(reverse("success"))      def get_context_data(self, **kwargs): -        data = super(QAArchaeologicalSiteDuplicateFormView, -                     self).get_context_data(**kwargs) -        data['action_name'] = _("Duplicate") +        data = super(QAArchaeologicalSiteDuplicateFormView, self).get_context_data( +            **kwargs +        ) +        data["action_name"] = _("Duplicate")          return data @@ -683,30 +797,36 @@ class GenerateStatsOperation(IshtarMixin, LoginRequiredMixin, RedirectView):      model = models.Operation      def get_redirect_url(self, *args, **kwargs): -        return reverse('display-item', -                       args=[self.model.SLUG, self.item.pk]) + "#statistics" +        return ( +            reverse("display-item", args=[self.model.SLUG, self.item.pk]) +            + "#statistics" +        )      def get(self, request, *args, **kwargs): -        self.item = self.model.objects.get(pk=kwargs['pk']) -        self.item._get_or_set_stats('_nb_acts', update=True) -        self.item._get_or_set_stats('_nb_indexed_acts', update=True) -        self.item._get_or_set_stats('_nb_context_records', update=True) -        self.item._get_or_set_stats('_nb_context_records_by_type', update=True, -                                    expected_type=list) -        self.item._get_or_set_stats('_nb_context_records_by_periods', -                                    update=True, expected_type=list) -        self.item._get_or_set_stats('_nb_finds', update=True) -        self.item._get_or_set_stats('_nb_finds_by_material_type', update=True, -                                    expected_type=list) -        self.item._get_or_set_stats('_nb_finds_by_types', update=True, -                                    expected_type=list) -        self.item._get_or_set_stats('_nb_finds_by_periods', update=True, -                                    expected_type=list) -        self.item._get_or_set_stats('_nb_documents', update=True) -        self.item._get_or_set_stats('_nb_documents_by_types', update=True, -                                    expected_type=list) -        self.item._get_or_set_stats('_nb_stats_finds_by_ue', update=True) +        self.item = self.model.objects.get(pk=kwargs["pk"]) +        self.item._get_or_set_stats("_nb_acts", update=True) +        self.item._get_or_set_stats("_nb_indexed_acts", update=True) +        self.item._get_or_set_stats("_nb_context_records", update=True) +        self.item._get_or_set_stats( +            "_nb_context_records_by_type", update=True, expected_type=list +        ) +        self.item._get_or_set_stats( +            "_nb_context_records_by_periods", update=True, expected_type=list +        ) +        self.item._get_or_set_stats("_nb_finds", update=True) +        self.item._get_or_set_stats( +            "_nb_finds_by_material_type", update=True, expected_type=list +        ) +        self.item._get_or_set_stats( +            "_nb_finds_by_types", update=True, expected_type=list +        ) +        self.item._get_or_set_stats( +            "_nb_finds_by_periods", update=True, expected_type=list +        ) +        self.item._get_or_set_stats("_nb_documents", update=True) +        self.item._get_or_set_stats( +            "_nb_documents_by_types", update=True, expected_type=list +        ) +        self.item._get_or_set_stats("_nb_stats_finds_by_ue", update=True)          return super(GenerateStatsOperation, self).get(request, *args, **kwargs) - - | 
