#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2010 Étienne Loks # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # See the file COPYING for details. """ Furnitures views """ import json from django.http import HttpResponse from django.template import RequestContext from django.shortcuts import render_to_response, redirect from django.utils.translation import ugettext, ugettext_lazy as _ from django.core.exceptions import ObjectDoesNotExist from django.db.models import Q from django.core import serializers from ishtar import settings from menus import menu import forms as ishtar_forms import models def index(request): """ Main page """ dct = {} return render_to_response('index.html', dct, context_instance=RequestContext(request)) def update_current_item(request): if not request.is_ajax() and not request.method == 'POST': return Http404() if 'value' in request.POST and 'item' in request.POST: request.session[request.POST['item']] = request.POST['value'] return HttpResponse('ok') def check_permission(request, action_slug, obj_id=None): if obj_id: return menu.items[action_slug].is_available(request.user, obj_id) return menu.items[action_slug].can_be_available(request.user) def autocomplete_person(request, person_type=None): if not request.user.has_perm('furnitures.view_person'): return HttpResponse(mimetype='text/plain') if not request.GET.get('term'): return HttpResponse(mimetype='text/plain') q = request.GET.get('term') limit = request.GET.get('limit', 15) try: limit = int(limit) except ValueError: return HttpResponseBadRequest() query = Q() for q in q.split(' '): query = query & (Q(name__istartswith=q) | Q(surname__istartswith=q) | \ Q(email__icontains=q)) if person_type: try: typs = [int(tp) for tp in person_type.split('_') if tp] typ = models.PersonType.objects.filter(pk__in=typs).all() query = query & Q(person_type__in=typ) except (ValueError, ObjectDoesNotExist): pass limit = 15 persons = models.Person.objects.filter(query)[:limit] data = json.dumps([{'id':person.pk, 'value':unicode(person)} for person in persons if person]) return HttpResponse(data, mimetype='text/plain') def autocomplete_town(request): 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(name__icontains=q) if settings.COUNTRY == 'fr': extra = (extra | Q(numero_insee__istartswith=q) | \ Q(departement__label__istartswith=q)) query = query & extra limit = 15 towns = models.Town.objects.filter(query)[:limit] data = json.dumps([{'id':town.pk, 'value':unicode(town)} for town in towns]) return HttpResponse(data, mimetype='text/plain') def autocomplete_file(request): 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 = 15 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') def autocomplete_operation(request, non_closed=True): 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 autocomplete_organization(request, orga_type=None): 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(name__icontains=q) query = query & extra if orga_type: try: typs = [int(tp) for tp in orga_type.split('_') if tp] typ = models.OrganizationType.objects.filter(pk__in=typs).all() query = query & Q(organization_type__in=typ) except (ValueError, ObjectDoesNotExist): pass limit = 15 organizations = models.Organization.objects.filter(query)[:limit] data = json.dumps([{'id':org.pk, 'value':unicode(org)} for org in organizations]) return HttpResponse(data, mimetype='text/plain') def action(request, action_slug, obj_id=None, *args, **kwargs): """ Action management """ if not check_permission(request, action_slug, obj_id): not_permitted_msg = ugettext(u"Operation not permitted.") return HttpResponse(not_permitted_msg) request.session['CURRENT_ACTION'] = action_slug associated_wizard = action_slug + '_wizard' dct = {} globals_dct = globals() if action_slug in globals_dct: return globals_dct[action_slug](request, dct, obj_id, *args, **kwargs) elif hasattr(ishtar_forms, action_slug + "_wizard"): return getattr(ishtar_forms, action_slug+"_wizard")(request, *args, **kwargs) return render_to_response('index.html', dct, context_instance=RequestContext(request))