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 1b27bcf43..519332222 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]) | 
