summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-08-16 16:57:14 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-08-16 16:58:35 +0200
commit9b7699ff154f1736c9ed0a93d061812c8296a86f (patch)
tree2ddde4a8b28819f78b4bdd3c6a2c6f5e1f0434d9 /ishtar_common/views.py
parent6f4a3e5256652d0e8205a2000252dea964e7ad4a (diff)
downloadIshtar-9b7699ff154f1736c9ed0a93d061812c8296a86f.tar.bz2
Ishtar-9b7699ff154f1736c9ed0a93d061812c8296a86f.zip
Account management: fix edit - can delete an account (refs #2977)
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py64
1 files changed, 54 insertions, 10 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 2d0976be1..01811ed2d 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -38,6 +38,7 @@ from django.contrib.auth.decorators import login_required
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse, NoReverseMatch
from django.db.models import Q, ImageField
+from django.db.models.fields import FieldDoesNotExist
from django.forms.models import modelformset_factory
from django.http import HttpResponse, Http404, HttpResponseRedirect, \
HttpResponseBadRequest
@@ -148,12 +149,18 @@ organization_deletion_wizard = wizards.OrganizationDeletionWizard.as_view(
url_name='organization_deletion',)
account_management_wizard = wizards.AccountWizard.as_view(
- [('selec-account_management', forms.PersonFormSelection),
+ [('selec-account_management', forms.PersonUserFormSelection),
('account-account_management', forms.AccountForm),
('final-account_management', forms.FinalAccountForm)],
label=_(u"Account management"),
url_name='account_management',)
+account_deletion_wizard = wizards.IshtarUserDeletionWizard.as_view(
+ [('selec-account_deletion', forms.AccountFormSelection),
+ ('final-account_deletion', FinalDeleteForm)],
+ label=_(u"Account deletion"),
+ url_name='account_deletion',)
+
def get_autocomplete_generic(model, extra={'available': True}):
def func(request):
@@ -447,14 +454,19 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
if k in reversed_bool_fields:
dct[k] = not dct[k]
# check also for empty value with image field
- c_field = model._meta.get_field(k.split('__')[0])
- if k.endswith('__isnull') and \
- isinstance(c_field, ImageField):
- if dct[k]:
- or_reqs.append(
- (k, {k.split('__')[0] + '__exact': ''}))
- else:
- dct[k.split('__')[0] + '__regex'] = '.{1}.*'
+ field_name = k.split('__')[0]
+ # TODO: can be improved in later evrsion of Django
+ try:
+ c_field = model._meta.get_field(field_name)
+ if k.endswith('__isnull') and \
+ isinstance(c_field, ImageField):
+ if dct[k]:
+ or_reqs.append(
+ (k, {k.split('__')[0] + '__exact': ''}))
+ else:
+ dct[k.split('__')[0] + '__regex'] = '.{1}.*'
+ except FieldDoesNotExist:
+ pass
for k in dated_fields:
if k in dct:
if not dct[k]:
@@ -527,6 +539,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
query = query & and_req
items = model.objects.filter(query).distinct()
+ # print(items.query)
q = request_items.get('sidx')
# table cols
@@ -614,7 +627,14 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
my_vals = []
for k in keys:
vals = [item]
+ # foreign key may be splited by "." or "__"
+ splitted_k = []
for ky in k.split('.'):
+ if '__' in ky:
+ splitted_k += ky.split('__')
+ else:
+ splitted_k.append(ky)
+ for ky in splitted_k:
new_vals = []
for val in vals:
if hasattr(val, 'all'): # manage related objects
@@ -685,7 +705,16 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
table_col = table_cols[idx]
if type(table_col) not in (list, tuple):
table_col = [table_col]
- k = "__".join([tc.split('.')[-1] for tc in table_col])
+ tab_cols = []
+ # foreign key may be splited by "." or "__"
+ for tc in table_col:
+ if '.' in tc:
+ tab_cols.append(tc.split('.')[-1])
+ elif '__' in tc:
+ tab_cols.append(tc.split('__')[-1])
+ else:
+ tab_cols.append(tc)
+ k = "__".join(tab_cols)
res[k] = value
rows.append(res)
data = json.dumps({
@@ -941,11 +970,26 @@ show_person = show_item(models.Person, 'person')
get_person = get_item(
models.Person,
'get_person', 'person',
+ reversed_bool_fields=['ishtaruser__isnull'],
extra_request_keys={
'name': ['name__icontains', 'raw_name__icontains'],
'surname': ['surname__icontains', 'raw_name__icontains'],
'attached_to': 'attached_to__pk',
'person_types': 'person_types__pk__in',
+ 'ishtaruser__isnull': 'ishtaruser__isnull'
+ })
+
+get_ishtaruser = get_item(
+ models.IshtarUser,
+ 'get_ishtaruser', 'ishtaruser',
+ extra_request_keys={
+ 'username': ['username__icontains'],
+ 'name': ['person__name__icontains', 'person__raw_name__icontains'],
+ 'surname': ['person__surname__icontains',
+ 'person__raw_name__icontains'],
+ 'email': ['person__email'],
+ 'attached_to': 'person__attached_to__pk',
+ 'person_types': 'person__person_types__pk__in',
})