diff options
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 139 |
1 files changed, 137 insertions, 2 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 06adb2232..0058821b2 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -44,7 +44,7 @@ from django.shortcuts import render_to_response, redirect from django.template import RequestContext, loader from django.utils.decorators import method_decorator from django.utils.translation import ugettext, ugettext_lazy as _ -from django.views.generic import ListView +from django.views.generic import ListView, UpdateView, CreateView from django.views.generic.edit import CreateView, DeleteView from xhtml2odt import xhtml2odt @@ -75,6 +75,11 @@ def index(request): return render_to_response('index.html', dct, context_instance=RequestContext(request)) +person_search_wizard = wizards.SearchWizard.as_view([ + ('general-person_search', forms.PersonFormSelection)], + label=_(u"Person search"), + url_name='person_search',) + person_creation_wizard = wizards.PersonWizard.as_view([ ('identity-person_creation', forms.SimplePersonForm), ('person_type-person_creation', forms.PersonTypeForm), @@ -96,6 +101,11 @@ person_deletion_wizard = wizards.PersonDeletionWizard.as_view([ label=_(u"Person deletion"), url_name='person_deletion',) +organization_search_wizard = wizards.SearchWizard.as_view([ + ('general-organization_search', forms.OrganizationFormSelection)], + label=_(u"Organization search"), + url_name='organization_search',) + organization_creation_wizard = wizards.OrganizationWizard.as_view([ ('identity-organization_creation', forms.OrganizationForm), ('final-organization_creation', FinalForm)], @@ -202,6 +212,45 @@ def autocomplete_town(request): for town in towns]) return HttpResponse(data, mimetype='text/plain') +def autocomplete_advanced_town(request, department_id=None, state_id=None): + if not request.GET.get('term'): + return HttpResponse(mimetype='text/plain') + q = request.GET.get('term') + q = unicodedata.normalize("NFKD", q).encode('ascii','ignore') + query = Q() + for q in q.split(' '): + extra = Q(name__icontains=q) + if settings.COUNTRY == 'fr': + extra = extra | Q(numero_insee__istartswith=q) + if not department_id: + extra = extra | Q(departement__label__istartswith=q) + query = query & extra + if department_id: + query = query & Q(departement__number__iexact=department_id) + if state_id: + query = query & Q(departement__state__number__iexact=state_id) + limit = 20 + towns = models.Town.objects.filter(query)[:limit] + result = [] + for town in towns: + val = town.name + if hasattr(town, 'numero_insee'): + val += " (%s)" % town.numero_insee + result.append({'id':town.pk, 'value':val}) + data = json.dumps(result) + return HttpResponse(data, mimetype='text/plain') + +def department_by_state(request, state_id=''): + if not state_id: + data = [] + else: + departments = models.Department.objects.filter(state__number=state_id) + data = json.dumps([{'id':department.pk, 'number':department.number, + 'value':unicode(department)} + for department in departments]) + return HttpResponse(data, mimetype='text/plain') + + from types import NoneType def format_val(val): @@ -480,7 +529,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], return func -def show_item(model, name): +def show_item(model, name, extra_dct=None): def func(request, pk, **dct): try: item = model.objects.get(pk=pk) @@ -511,6 +560,9 @@ def show_item(model, name): if len(historized) > 1: dct['previous'] = historized[1].history_date dct['item'], dct['item_name'] = item, name + # add context + if extra_dct: + dct.update(extra_dct(request, item)) context_instance = RequestContext(request) context_instance.update(dct) n = datetime.datetime.now() @@ -790,6 +842,20 @@ def dashboard_main_detail(request, item_name): return render_to_response('ishtar/dashboards/dashboard_main_detail.html', dct, context_instance=RequestContext(request)) +def reset_wizards(request): + # dynamicaly execute each reset_wizards of each ishtar app + for app in settings.INSTALLED_APPS: + if app == 'ishtar_common': + # no need for infinite recursion + continue + try: + module = __import__(app) + except ImportError: + continue + if hasattr(module, 'views') and hasattr(module.views, 'reset_wizards'): + module.views.reset_wizards(request) + return redirect(reverse('start')) + ITEM_PER_PAGE = 20 def merge_action(model, form, key): def merge(request, page=1): @@ -943,3 +1009,72 @@ class ImportDeleteView(IshtarMixin, LoginRequiredMixin, DeleteView): def get_success_url(self): return reverse('current_imports') + +class PersonCreate(LoginRequiredMixin, CreateView): + model = models.Person + form_class = forms.BasePersonForm + template_name = 'ishtar/person_form.html' + + def get_success_url(self): + return reverse('person_edit', args=[self.object.pk]) + +class PersonEdit(LoginRequiredMixin, UpdateView): + model = models.Person + form_class = forms.BasePersonForm + template_name = 'ishtar/person_form.html' + + def get_success_url(self): + return reverse('person_edit', args=[self.object.pk]) + +class OrganizationCreate(LoginRequiredMixin, CreateView): + model = models.Organization + form_class = forms.BaseOrganizationForm + template_name = 'ishtar/organization_form.html' + form_prefix = "orga" + + def get_form_kwargs(self): + kwargs = super(OrganizationCreate, self).get_form_kwargs() + if hasattr(self.form_class, 'form_prefix'): + kwargs.update({'prefix': self.form_class.form_prefix}) + return kwargs + +class OrganizationEdit(LoginRequiredMixin, UpdateView): + model = models.Organization + form_class = forms.BaseOrganizationForm + template_name = 'ishtar/organization_form.html' + + def get_form_kwargs(self): + kwargs = super(OrganizationEdit, self).get_form_kwargs() + if hasattr(self.form_class, 'form_prefix'): + kwargs.update({'prefix': self.form_class.form_prefix}) + return kwargs + +class OrganizationPersonCreate(LoginRequiredMixin, CreateView): + model = models.Person + form_class = forms.BaseOrganizationPersonForm + template_name = 'ishtar/organization_person_form.html' + relative_label = _("Corporation manager") + + def get_context_data(self, *args, **kwargs): + data = super(OrganizationPersonCreate, self).get_context_data(*args, + **kwargs) + data['relative_label'] = self.relative_label + return data + + def get_success_url(self): + return reverse('organization_person_edit', args=[self.object.pk]) + +class OrganizationPersonEdit(LoginRequiredMixin, UpdateView): + model = models.Person + form_class = forms.BaseOrganizationPersonForm + template_name = 'ishtar/organization_person_form.html' + relative_label = _("Corporation manager") + + def get_context_data(self, *args, **kwargs): + data = super(OrganizationPersonEdit, self).get_context_data(*args, + **kwargs) + data['relative_label'] = self.relative_label + return data + + def get_success_url(self): + return reverse('organization_person_edit', args=[self.object.pk]) |