summaryrefslogtreecommitdiff
path: root/chimere/main/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/main/models.py')
-rw-r--r--chimere/main/models.py38
1 files changed, 30 insertions, 8 deletions
diff --git a/chimere/main/models.py b/chimere/main/models.py
index 710623c..4197a23 100644
--- a/chimere/main/models.py
+++ b/chimere/main/models.py
@@ -23,6 +23,7 @@ Models description
from django.utils.translation import ugettext_lazy as _
from django.contrib.gis.db import models
+from django.contrib.gis.gdal import SpatialReference
from django.contrib import admin
from chimere import settings
@@ -292,14 +293,14 @@ class SimpleArea:
return True
return False
- def getCategories(self, status='A'):
+ def getCategories(self, status='A', filter_available=True):
"""
Get categories for this area
"""
equal_status = ''
if len(status) == 1:
equal_status = "='%s'" % status[0]
- else:
+ elif status:
equal_status = " in ('%s')" % "','".join(status)
area = "ST_GeometryFromText('POLYGON((%f %f,%f %f,%f %f,%f %f, %f %f))'\
, %d)" % (self.upper_left_corner.x, self.upper_left_corner.y,
@@ -314,9 +315,12 @@ subcat.name as name, subcat.available as available, subcat.icon_id as icon_id,
subcat.color_theme_id as color_theme_id, subcat.order as order,
subcat.item_type as item_type from main_subcategory subcat'''
sql = sql_main + '''
-inner join main_marker mark on mark.subcategory_id=subcat.id and mark.status%s
-and ST_Contains(%s, mark.point) where subcat.available = TRUE''' % (
- equal_status, area)
+inner join main_marker mark on mark.subcategory_id=subcat.id
+ and ST_Contains(%s, mark.point)''' % area
+ if equal_status:
+ sql += ' and mark.status' + equal_status
+ if filter_available:
+ sql += ' where subcat.available = TRUE'
# django > 1.1
#subcats = SubCategory.objects.raw(sql)
from django.db import connection, transaction
@@ -326,9 +330,12 @@ and ST_Contains(%s, mark.point) where subcat.available = TRUE''' % (
for r in cursor.fetchall():
subcats.add(SubCategory.objects.get(id=r[0]))
sql = sql_main + '''
-inner join main_route rt on rt.subcategory_id=subcat.id and rt.status%s
-and (ST_Intersects(%s, rt.route) or ST_Contains(%s, rt.route))
-where subcat.available = TRUE''' % (equal_status, area, area)
+inner join main_route rt on rt.subcategory_id=subcat.id
+and (ST_Intersects(%s, rt.route) or ST_Contains(%s, rt.route))''' % (area, area)
+ if equal_status:
+ sql += ' and rt.status' + equal_status
+ if filter_available:
+ sql += ' where subcat.available = TRUE'
# django > 1.1
#subcats += SubCategory.objects.raw(sql)
cursor.execute(sql, [])
@@ -366,6 +373,21 @@ class Area(models.Model, SimpleArea):
'''
return cls.objects.filter(available=True)
+ def getIncludeSql(self, geometry='"main_marker".point'):
+ """
+ Get the sql statement for the test if the point is included in the area
+ """
+ area = "ST_GeometryFromText('POLYGON((%f %f,%f %f,%f %f,%f %f, %f %f))'\
+, %d)" % (self.upper_left_corner.x, self.upper_left_corner.y,
+ self.lower_right_corner.x, self.upper_left_corner.y,
+ self.lower_right_corner.x, self.lower_right_corner.y,
+ self.upper_left_corner.x, self.lower_right_corner.y,
+ self.upper_left_corner.x, self.upper_left_corner.y,
+ settings.EPSG_DISPLAY_PROJECTION
+ )
+ sql = "ST_Contains(" + area + ", " + geometry + ")"
+ return sql
+
class PropertyModel(models.Model):
'''Model for a property
'''