diff options
Diffstat (limited to 'chimere/main/models.py')
-rw-r--r-- | chimere/main/models.py | 38 |
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 ''' |