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      '''  | 
