#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2010-2014 Étienne Loks # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # See the file COPYING for details. import json from django.core.urlresolvers import reverse from django.db.models import Q from django.http import HttpResponse from django.shortcuts import render_to_response, redirect from django.utils.translation import ugettext_lazy as _ from ishtar_common.views import get_item, show_item, revert_item from ishtar_common.models import Person import models from ishtar_common.wizards import SearchWizard from archaeological_operations.wizards import is_preventive, is_not_preventive from wizards import * from ishtar_common.forms_common import TownFormset from archaeological_operations.forms import ParcelFormSet, \ DocumentGenerationAdminActForm from forms import * from archaeological_operations.views import generatedoc_administrativeactop def autocomplete_file(request): if not request.user.has_perm('ishtar_common.view_file', models.File) and \ not request.user.has_perm('ishtar_common.view_own_file', models.File) \ and not request.user.ishtaruser.has_right('file_search'): return HttpResponse(mimetype='text/plain') if not request.GET.get('term'): return HttpResponse(mimetype='text/plain') q = request.GET.get('term') query = Q() for q in q.split(' '): extra = Q(internal_reference__icontains=q) | \ Q(towns__name__icontains=q) try: value = int(q) extra = extra | Q(year=q) | Q(numeric_reference=q) except ValueError: pass query = query & extra limit = 20 files = models.File.objects.filter(query)[:limit] data = json.dumps([{'id':file.pk, 'value':unicode(file)} for file in files]) return HttpResponse(data, mimetype='text/plain') get_file = get_item(models.File, 'get_file', 'file', bool_fields = ['end_date__isnull'], associated_models = [(Person, 'associated_file__general_contractor')], extra_request_keys={ 'parcel_0':('parcels__section', 'operations__parcels__section'), 'parcel_1':('parcels__parcel_number', 'operations__parcels__parcel_number'), 'end_date':'end_date__isnull', 'name':'name__icontains', 'permit_reference':'permit_reference__icontains' },) show_file = show_item(models.File, 'file') revert_file = revert_item(models.File) get_administrativeactfile = get_item(AdministrativeAct, 'get_administrativeactfile', 'administrativeactfile', associated_models = [(models.File, 'associated_file'), (Person, 'associated_file__general_contractor')], dated_fields = ['signature_date__lte', 'signature_date__gte'], extra_request_keys={ 'year':'signature_date__year', 'associated_file__towns':'associated_file__towns__pk', 'operation__towns':'operation__towns__pk', 'act_type__intented_to':'act_type__intented_to', 'signature_date_before':'signature_date__lte', 'signature_date_after':'signature_date__gte', 'associated_file__name':'associated_file__name__icontains', 'associated_file__permit_reference':\ 'associated_file__permit_reference__icontains'}, relative_session_names={'file':'associated_file__pk'}) def dashboard_file(request, *args, **kwargs): """ Main dashboard """ dct = {'dashboard': models.FileDashboard()} return render_to_response('ishtar/dashboards/dashboard_file.html', dct, context_instance=RequestContext(request)) file_search_wizard = SearchWizard.as_view( [('general-file_search', FileFormSelection)], label=_(u"File search"), url_name='file_search',) file_creation_wizard = FileWizard.as_view([ ('general-file_creation', FileFormGeneral), ('towns-file_creation', TownFormset), ('parcels-file_creation', ParcelFormSet), ('preventive-file_creation', FileFormPreventive), ('research-file_creation', FileFormResearch), ('final-file_creation', FinalForm)], label=_(u"New file"), condition_dict={ 'preventive-file_creation':\ is_preventive( 'general-file_creation', models.FileType, type_key='file_type'), 'research-file_creation':\ is_not_preventive('general-file_creation', models.FileType, type_key='file_type'), }, url_name='file_creation',) file_modification_wizard = FileModificationWizard.as_view([ ('selec-file_modification', FileFormSelection), ('general-file_modification', FileFormGeneralRO), ('towns-file_modification', TownFormset), ('parcels-file_modification', ParcelFormSet), ('preventive-file_modification', FileFormPreventive), ('research-file_modification', FileFormResearch), ('final-file_modification', FinalForm)], label=_(u"File modification"), condition_dict={ 'preventive-file_modification':\ is_preventive('general-file_modification', models.FileType, type_key='file_type'), 'research-file_modification':\ is_not_preventive('general-file_modification', models.FileType, type_key='file_type'), }, url_name='file_modification',) def file_modify(request, pk): view = file_modification_wizard(request) FileModificationWizard.session_set_value( request, 'selec-file_modification', 'pk', pk, reset=True) return redirect(reverse('file_modification', kwargs={'step':'general-file_modification'})) file_closing_wizard = FileClosingWizard.as_view([ ('selec-file_closing', FileFormSelection), ('date-file_closing', ClosingDateFormSelection), ('final-file_closing', FinalFileClosingForm)], label=_(u"File closing"), url_name='file_closing',) file_deletion_wizard = FileDeletionWizard.as_view([ ('selec-file_deletion', FileFormSelection), ('final-file_deletion', FinalFileDeleteForm)], label=_(u"File deletion"), url_name='file_deletion',) file_administrativeactfile_wizard = FileAdministrativeActWizard.as_view([ ('selec-file_administrativeactfile', FileFormSelection), ('administrativeact-file_administrativeactfile', AdministrativeActFileForm), ('final-file_administrativeactfile', FinalForm)], label=_(u"File: new administrative act"), url_name='file_administrativeactfile',) file_administrativeactfile_modification_wizard = \ FileEditAdministrativeActWizard.as_view([ ('selec-file_administrativeactfile_modification', AdministrativeActFileModifyFormSelection), ('administrativeact-file_administrativeactfile_modification', AdministrativeActFileForm), ('final-file_administrativeactfile_modification', FinalForm)], label=_(u"File: administrative act modification"), url_name='file_administrativeactfile_modification',) file_administrativeactfile_deletion_wizard = \ AdministrativeActDeletionWizard.as_view([ ('selec-file_administrativeactfile_deletion', AdministrativeActFileFormSelection), ('final-file_administrativeactfile_deletion', FinalAdministrativeActDeleteForm)], label=_(u"File: administrative act deletion"), url_name='file_administrativeactfile_deletion',) def file_administrativeactfile_document(request): dct = {} if request.POST: dct['search_form'] = AdministrativeActFileFormSelection(request.POST) dct['template_form'] = DocumentGenerationAdminActForm(request.POST) if dct['search_form'].is_valid() and dct['template_form'].is_valid(): return generatedoc_administrativeactop(request, dct['search_form'].cleaned_data.get('pk'), dct['template_form'].cleaned_data.get('document_template')) else: dct['search_form'] = AdministrativeActFileFormSelection() dct['template_form'] = DocumentGenerationAdminActForm() return render_to_response('ishtar/administrativeact_document.html', dct, context_instance=RequestContext(request))