summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py45
1 files changed, 29 insertions, 16 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 0155896f4..12b1b79f9 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -47,10 +47,9 @@ def post_save_user(sender, **kwargs):
else:
ishtaruser = q.all()[0]
if ishtaruser.is_superuser \
- and ishtaruser.person.person_type.txt_idx != 'administrator':
- ishtaruser.person.person_type = PersonType.objects.get(
- txt_idx='administrator')
- ishtaruser.person.save()
+ and not ishtaruser.has_right('administrator'):
+ ishtaruser.person.person_types.add(PersonType.objects.get(
+ txt_idx='administrator'))
post_save.connect(post_save_user, sender=User)
# HistoricalRecords enhancement: don't save identical versions
@@ -193,16 +192,18 @@ class GeneralType(models.Model):
return u""
@classmethod
- def get_types(cls, dct={}, instances=False, exclude=[]):
+ def get_types(cls, dct={}, instances=False, exclude=[], empty_first=True):
base_dct = dct.copy()
if hasattr(cls, 'parent'):
- return cls._get_parent_types(base_dct, instances, exclude=exclude)
- return cls._get_types(base_dct, instances, exclude=exclude)
+ return cls._get_parent_types(base_dct, instances, exclude=exclude,
+ empty_first=empty_first)
+ return cls._get_types(base_dct, instances, exclude=exclude,
+ empty_first=empty_first)
@classmethod
- def _get_types(cls, dct={}, instances=False, exclude=[]):
+ def _get_types(cls, dct={}, instances=False, exclude=[], empty_first=True):
dct['available'] = True
- if not instances:
+ if not instances and empty_first:
yield ('', '--')
items = cls.objects.filter(**dct)
if exclude:
@@ -237,9 +238,10 @@ class GeneralType(models.Model):
yield sub_child
@classmethod
- def _get_parent_types(cls, dct={}, instances=False, exclude=[]):
+ def _get_parent_types(cls, dct={}, instances=False, exclude=[],
+ empty_first=True):
dct['available'] = True
- if not instances:
+ if not instances and empty_first:
yield ('', '--')
dct['parent'] = None
items = cls.objects.filter(**dct)
@@ -395,10 +397,10 @@ class WizardStep(models.Model):
class UserDashboard:
def __init__(self):
- types = IshtarUser.objects.values('person__person_type',
- 'person__person_type__label')
+ types = IshtarUser.objects.values('person__person_types',
+ 'person__person_types__label')
self.types = types.annotate(number=Count('pk'))\
- .order_by('person__person_type')
+ .order_by('person__person_types')
class Dashboard:
def __init__(self, model):
@@ -563,7 +565,7 @@ class Person(Address, OwnPerms) :
null=True)
name = models.CharField(_(u"Name"), max_length=30)
email = models.CharField(_(u"Email"), max_length=40, blank=True, null=True)
- person_type = models.ForeignKey(PersonType, verbose_name=_(u"Type"))
+ person_types = models.ManyToManyField(PersonType, verbose_name=_(u"Types"))
attached_to = models.ForeignKey('Organization',
verbose_name=_(u"Is attached to"), blank=True, null=True)
@@ -584,6 +586,14 @@ class Person(Address, OwnPerms) :
if getattr(self, attr)]
return u" ".join(values)
+ def has_right(self, right_name):
+ if type(right_name) in (list, tuple):
+ return bool(
+ self.person_types.filter(txt_idx__in=right_name).count() or
+ self.person_types.filter(wizard__url_name__in=right_name).count())
+ return bool(self.person_types.filter(txt_idx=right_name).count() or
+ self.person_types.filter(wizard__url_name=right_name).count())
+
def full_label(self):
values = []
if self.title:
@@ -613,10 +623,13 @@ class IshtarUser(User):
person_type = PersonType.objects.get(txt_idx='public_access')
person = Person.objects.create(title='Mr', surname=surname,
name=name, email=email,
- person_type=person_type,
history_modifier=user)
+ person.person_types.add(person_type)
return IshtarUser.objects.create(user_ptr=user, person=person)
+ def has_right(self, right_name):
+ return self.person.has_right('administrator')
+
class AuthorType(GeneralType):
class Meta:
verbose_name = _(u"Author type")