summaryrefslogtreecommitdiff
path: root/ishtar/furnitures/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar/furnitures/models.py')
-rw-r--r--ishtar/furnitures/models.py61
1 files changed, 52 insertions, 9 deletions
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py
index 7687cb6f3..64c76822d 100644
--- a/ishtar/furnitures/models.py
+++ b/ishtar/furnitures/models.py
@@ -26,6 +26,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.core.validators import validate_slug
from django.utils.translation import ugettext_lazy as _, ugettext
from django.db.utils import DatabaseError
+from django.db.models import Q
from django.contrib.auth.models import User
from django.contrib.gis.db import models
@@ -58,8 +59,47 @@ class OwnPerms:
"""
Manage special permissions for object's owner
"""
+ @classmethod
+ def get_query_owns(cls, user):
+ """
+ Query object to get own items
+ """
+ return None # implement for each object
+
def is_own(self, user):
- return False
+ """
+ Check if the current object is owned by the user
+ """
+ query = self.get_query_owns(user)
+ if not query:
+ return False
+ query = query & Q(pk=self.pk)
+ return cls.objects.filter(query).count()
+
+
+ @classmethod
+ def has_item_of(cls, user):
+ """
+ Check if the user own some items
+ """
+ query = cls.get_query_owns(user)
+ if not query:
+ return False
+ return cls.objects.filter(query).count()
+
+ @classmethod
+ def get_owns(cls, user):
+ """
+ Get Own items
+ """
+ if isinstance(user, User):
+ user = IshtarUser.objects.get(user_ptr=user)
+ if user.is_anonymous():
+ return []
+ query = cls.get_query_owns(user)
+ if not query:
+ return []
+ return cls.objects.filter(query).order_by(*cls._meta.ordering).all()
class GeneralType(models.Model):
"""
@@ -266,6 +306,8 @@ class File(BaseHistorizedItem, OwnPerms):
("change_own_file", ugettext(u"Can change own Archaelogical file")),
("delete_own_file", ugettext(u"Can delete own Archaelogical file")),
)
+ ordering = ['-year', '-numeric_reference']
+
def __unicode__(self):
items = [unicode(_('Intercommunal'))]
if self.towns.count() == 1:
@@ -275,13 +317,6 @@ class File(BaseHistorizedItem, OwnPerms):
if getattr(self, k)]
return u" - ".join(items)
- @classmethod
- def get_owns(cls, user, order_by=['-year', '-numeric_reference']):
- if user.is_anonymous():
- return []
- return cls.objects.filter(history_modifier=user).order_by(*order_by
- ).all()
-
class OperationType(GeneralType):
class Meta:
verbose_name = _(u"Operation type")
@@ -332,13 +367,21 @@ class Operation(BaseHistorizedItem, OwnPerms):
if getattr(self, k)]
return u" - ".join(items)
+ def is_own(self, person):
+ return False
+
+ @classmethod
+ def get_query_owns(cls, user):
+ return Q(in_charge=user.person)|Q(history_modifier=user)
+
+ """
@classmethod
def get_owns(cls, user, order_by=['-year', '-operation_code']):
if user.is_anonymous():
return []
return cls.objects.filter(history_modifier=user).order_by(*order_by
).all()
-
+"""
class Parcel(LightHistorizedItem):
associated_file = models.ForeignKey(File, related_name='parcels',
blank=True, null=True, verbose_name=_(u"File"))