#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2010-2012 É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.db.models import Q from django.http import HttpResponse from django.shortcuts import render_to_response from django.utils.translation import ugettext_lazy as _ from ishtar_common.views import get_item, show_item, revert_item from ishtar_common.wizards import SearchWizard from wizards import * from forms import * import models def autocomplete_operation(request, non_closed=True): person_types = request.user.ishtaruser.person.person_type 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 person_types.rights.filter( wizard__url_name='operation_search').count()): 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(towns__name__icontains=q) try: value = int(q) extra = extra | Q(year=q) | Q(operation_code=q) except ValueError: pass query = query & extra if non_closed: query = query & Q(end_date__isnull=True) limit = 15 operations = models.Operation.objects.filter(query)[:limit] data = json.dumps([{'id':operation.pk, 'value':unicode(operation)} for operation in operations]) return HttpResponse(data, mimetype='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(mimetype='text/plain') data = json.dumps({'id':models.Operation.get_available_operation_code(year)}) return HttpResponse(data, mimetype='text/plain') get_operation = get_item(models.Operation, 'get_operation', 'operation', bool_fields = ['end_date__isnull'], extra_request_keys={'common_name':'common_name__icontains', 'end_date':'end_date__isnull', 'year_index':('year', 'operation_code')}) show_operation = show_item(models.Operation, 'operation') revert_operation = revert_item(models.Operation) get_operationsource = get_item(models.OperationSource, 'get_operationsource', 'operationsource', extra_request_keys={'operation__towns':'operation__towns__pk', 'operation__operation_type':'operation__operation_type__pk', 'operation__year':'operation__year'}) 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'}) def dashboard_operation(request, *args, **kwargs): """ Operation dashboard """ dct = {'dashboard': models.OperationDashboard()} return render_to_response('ishtar/dashboards/dashboard_operation.html', dct, context_instance=RequestContext(request)) operation_search_wizard = SearchWizard.as_view([ ('general-operation_search', OperationFormSelection)], label=_(u"Operation search"), url_name='operation_search',) operation_creation_wizard = OperationWizard.as_view([ ('general-operation_creation', OperationFormGeneral), ('preventive-operation_creation', OperationFormPreventive), ('preventivediag-operation_creation', OperationFormPreventiveDiag), ('townsgeneral-operation_creation', TownFormset), ('towns-operation_creation', SelectedTownFormset), ('parcelsgeneral-operation_creation', SelectedParcelGeneralFormSet), ('parcels-operation_creation', SelectedParcelFormSet), ('remains-operation_creation', RemainFormset), ('periods-operation_creation', PeriodFormset), ('final-operation_creation', FinalForm)], label=_(u"New operation"), condition_dict={ 'preventive-operation_creation':\ is_preventive('general-operation_creation', models.OperationType, 'operation_type', 'prev_excavation'), 'preventivediag-operation_creation':\ is_preventive('general-operation_creation', models.OperationType, 'operation_type', 'arch_diagnostic'), 'townsgeneral-operation_creation':has_associated_file( 'general-operation_creation', negate=True), 'towns-operation_creation':has_associated_file( 'general-operation_creation'), 'parcelsgeneral-operation_creation':has_associated_file( 'general-operation_creation', negate=True), 'parcels-operation_creation':has_associated_file( 'general-operation_creation'), }, url_name='operation_creation',) operation_modification_wizard = OperationModificationWizard.as_view([ ('selec-operation_modification', OperationFormSelection), ('general-operation_modification', OperationFormGeneral), ('preventive-operation_modification', OperationFormPreventive), ('preventivediag-operation_modification', OperationFormPreventiveDiag), ('towns-operation_modification', SelectedTownFormset), ('townsgeneral-operation_modification', TownFormset), ('parcels-operation_modification', SelectedParcelFormSet), ('parcelsgeneral-operation_modification', SelectedParcelGeneralFormSet), ('remains-operation_modification', RemainFormset), ('periods-operation_modification', PeriodFormset), ('final-operation_modification', FinalForm)], label=_(u"Operation modification"), condition_dict={ 'preventive-operation_modification':is_preventive( 'general-operation_modification', models.OperationType, 'operation_type', 'prev_excavation'), 'preventivediag-operation_modification':is_preventive( 'general-operation_modification', models.OperationType, 'operation_type', 'arch_diagnostic'), 'townsgeneral-operation_modification':has_associated_file( 'general-operation_modification', negate=True), 'towns-operation_modification':has_associated_file( 'general-operation_modification'), 'parcelsgeneral-operation_modification':has_associated_file( 'general-operation_modification', negate=True), 'parcels-operation_modification':has_associated_file( 'general-operation_modification'), }, url_name='operation_modification',) operation_closing_wizard = OperationClosingWizard.as_view([ ('selec-operation_closing', OperationFormSelection), ('date-operation_closing', ClosingDateFormSelection), ('final-operation_closing', FinalOperationClosingForm)], label=_(u"Operation closing"), url_name='operation_closing',) operation_deletion_wizard = OperationDeletionWizard.as_view([ ('selec-operation_deletion', OperationFormSelection), ('final-operation_deletion', OperationDeletionForm)], label=_(u"Operation deletion"), url_name='operation_deletion',) operation_source_creation_wizard = OperationSourceWizard.as_view([ ('selec-operation_source_creation', SourceOperationFormSelection), ('source-operation_source_creation',OperationSourceForm), ('authors-operation_source_creation', AuthorFormset), ('final-operation_source_creation', FinalForm)], label=_(u"Operation: source creation"), url_name='operation_source_creation',) operation_source_modification_wizard = OperationSourceWizard.as_view([ ('selec-operation_source_modification', OperationSourceFormSelection), ('source-operation_source_modification', OperationSourceForm), ('authors-operation_source_modification', AuthorFormset), ('final-operation_source_modification', FinalForm)], label=_(u"Operation: source modification"), url_name='operation_source_modification',) operation_source_deletion_wizard = OperationSourceDeletionWizard.as_view([ ('selec-operation_source_deletion', OperationSourceFormSelection), ('final-operation_source_deletion', SourceDeletionForm)], label=_(u"Operation: source deletion"), url_name='operation_source_deletion',) operation_administrativeactop_wizard = \ OperationAdministrativeActWizard.as_view([ ('selec-operation_administrativeactop', OperationFormSelection), ('administrativeact-operation_administrativeactop', AdministrativeActOpeForm), ('final-operation_administrativeactop', FinalForm)], label=_(u"Operation: new administrative act"), url_name='operation_administrativeactop',) operation_administrativeactop_modification_wizard = \ OperationEditAdministrativeActWizard.as_view([ ('selec-operation_administrativeactop_modification', AdministrativeActOpeFormSelection), ('administrativeact-operation_administrativeactop_modification', AdministrativeActOpeForm), ('final-operation_administrativeactop_modification', FinalForm)], label=_(u"Operation: administrative act modification"), url_name='operation_administrativeactop_modification',) operation_administrativeactop_deletion_wizard = \ AdministrativeActDeletionWizard.as_view([ ('selec-operation_administrativeactop_deletion', AdministrativeActOpeFormSelection), ('final-operation_administrativeactop_deletion', FinalAdministrativeActDeleteForm)], label=_(u"Operation: administrative act deletion"), url_name='operation_administrativeactop_deletion',)