summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py139
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])