示例#1
0
    def get_queryset(self):
        queryset = self.model.objects.filter(is_active=True)
        if not self.form.is_valid():
            return queryset

        data = self.form.cleaned_data

        group = data.get('group', None)
        if group:
            queryset = queryset.filter(group=group)

        latlng = self.form.point
        if latlng:
            # Convert to geographic coords
            queryset = queryset.transform(get_geographic_srid())

            # Constrain by distance if set up
            max_distance = self.get_max_distance()
            if max_distance:
                queryset = queryset.filter(
                    location__distance_lte=(latlng, max_distance))

            # Add distance query
            queryset = queryset.distance(latlng)

            # Convert back to geodetic coords
            queryset = queryset.transform(get_geodetic_srid())

            # Order by distance
            queryset = queryset.order_by('distance')

        return queryset
示例#2
0
    def geocoordinates(self, data):
        latitude = data.get('latitude', None)
        longitude = data.get('longitude', None)
        if latitude and longitude:
            return GEOSGeometry('POINT(%s %s)' % (longitude, latitude), get_geodetic_srid())

        query = data.get('query', None)
        if query is not None:
            try:
                return geocode.GeoCodeService().geocode(query)
            except geocode.ServiceError:
                return None
示例#3
0
    def geocoordinates(self, data):
        latitude = data.get('latitude', None)
        longitude = data.get('longitude', None)
        if latitude and longitude:
            return GEOSGeometry('POINT(%s %s)' % (longitude, latitude),
                                get_geodetic_srid())

        query = data.get('query', None)
        if query is not None:
            try:
                return geocode.GeoCodeService().geocode(query)
            except geocode.ServiceError:
                return None
示例#4
0
    def get_queryset(self):
        queryset = self.model.objects.filter(is_active=True)

        group = self.request.POST.get('group', None)
        if group:
            queryset = queryset.filter(group=group)

        location = self.request.POST.get('location', None)
        if location:
            point = GEOSGeometry(location)
            queryset = queryset.transform(
                get_geographic_srid()
            ).distance(
                point
            ).transform(
                get_geodetic_srid()
            ).order_by('distance')
        return queryset
示例#5
0
    def get_queryset(self):
        queryset = self.model.objects.filter(is_active=True)
        if not self.form.is_valid():
            return queryset

        data = self.form.cleaned_data

        group = data.get('group', None)
        if group:
            queryset = queryset.filter(group=group)

        latlng = self.form.point
        if latlng:
            queryset = queryset.transform(
                get_geographic_srid()).distance(latlng).transform(
                    get_geodetic_srid()).order_by('distance')

        return queryset
示例#6
0
    def get_queryset(self):
        queryset = self.model.objects.filter(is_active=True)
        if not self.form.is_valid():
            return queryset

        data = self.form.cleaned_data

        group = data.get('group', None)
        if group:
            queryset = queryset.filter(group=group)

        latlng = self.form.point
        if latlng:
            queryset = queryset.transform(
                get_geographic_srid()
            ).distance(
                latlng
            ).transform(
                get_geodetic_srid()
            ).order_by('distance')

        return queryset
class Store(models.Model):
    name = models.CharField(_('Name'), max_length=100)
    slug = models.SlugField(_('Slug'), max_length=100, null=True)

    # Contact details
    manager_name = models.CharField(_('Manager name'),
                                    max_length=200,
                                    blank=True,
                                    null=True)
    phone = models.CharField(_('Phone'), max_length=64, blank=True, null=True)
    email = models.CharField(_('Email'), max_length=100, blank=True, null=True)

    reference = models.CharField(
        _("Reference"),
        max_length=32,
        unique=True,
        null=True,
        blank=True,
        help_text=_("A reference number that uniquely identifies this store"))

    image = models.ImageField(_("Image"),
                              upload_to="uploads/store-images",
                              blank=True,
                              null=True)
    description = models.CharField(_("Description"),
                                   max_length=2000,
                                   blank=True,
                                   null=True)
    location = PointField(
        _("Location"),
        srid=get_geodetic_srid(),
    )

    group = models.ForeignKey('stores.StoreGroup',
                              related_name='stores',
                              verbose_name=_("Group"),
                              null=True,
                              blank=True)

    is_pickup_store = models.BooleanField(_("Is pickup store"), default=True)
    is_active = models.BooleanField(_("Is active"), default=True)

    objects = StoreManager()

    class Meta:
        abstract = True
        ordering = ('name', )

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super(Store, self).save(*args, **kwargs)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('stores:detail',
                       kwargs={
                           'dummyslug': self.slug,
                           'pk': self.pk
                       })

    @property
    def has_contact_details(self):
        return any([self.manager_name, self.phone, self.email])