Exemple #1
0
class AreaSource(models.Model):
    """A simple polygon geometry demarcating the area of a Project or Real Estate boundaries (where applicable)"""

    # IDENTIFICATION

    name = models.CharField(max_length=255)

    # LINKS

    asset = models.ForeignKey('portfolio.ProjectAsset', null=True, blank=True, on_delete=models.CASCADE)

    # ATTRIBUTES
    location = PolygonField()

    #
    # BOOKKEEPING FIELDS
    #
    creation_date = models.DateTimeField(auto_now_add=True)
    last_change_date = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('portfolio:AreaSource_edit', kwargs={'pk': self.pk})

    class Meta:
        verbose_name = "Area Source"
        verbose_name_plural = "Area Sources"
Exemple #2
0
 def test_make_valid_output_field(self):
     # output_field is GeometryField instance because different geometry
     # types can be returned.
     output_field = functions.MakeValid(
         Value(Polygon(), PolygonField(srid=42)), ).output_field
     self.assertIs(output_field.__class__, GeometryField)
     self.assertEqual(output_field.srid, 42)
class ServiceAreas(models.Model):
    name = models.CharField(max_length=30)
    price = models.DecimalField(decimal_places=2, max_digits=10)
    service_area = PolygonField(blank=False, null=False)
    provider = models.ForeignKey(Providers, on_delete=models.PROTECT)

    def __str__(self):
        return 'Service Area:{}-{}'.format(self.id, self.name)
Exemple #4
0
class ServiceArea(models.Model):
    provider = models.ForeignKey(Provider, on_delete=models.CASCADE)
    name = models.CharField(max_length=120)
    price = MoneyField(decimal_places=3, max_digits=8)
    area = PolygonField()

    def __str__(self):
        return f'{self.name} ({self.price})'
Exemple #5
0
class GeofenceZone(models.Model):
    gps = models.ForeignKey(GPSDevice, on_delete=models.CASCADE)
    geom = PolygonField(srid=4326)

    def __str__(self):
        return str(self.id)

    class Meta:
        verbose_name_plural = 'GeofenceZones'
class Timezone(models.Model):
    class Meta:
        app_label = 'geo_timezones'

    timezone = models.CharField(max_length=30)
    geom = PolygonField()

    objects = TimezoneManager()

    def __str__(self):
        return self.timezone
Exemple #7
0
class Service(Model):
    provider = ForeignKey(Provider, on_delete=CASCADE)
    name = CharField(max_length=100)
    price = DecimalField(decimal_places=4,
                         max_digits=6,
                         validators=[MinValueValidator(0)])
    poly = PolygonField(blank=False, null=False)

    def __str__(self):
        return "{}({},{}): {}".format(self.provider.name, self.id, self.name,
                                      self.poly)
Exemple #8
0
class ServiceArea(models.Model):
    name = models.CharField(max_length=80)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    provider = models.ForeignKey(Provider, on_delete=models.CASCADE)
    polygon = PolygonField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def get_summarized(self):
        return '{} ({}) - {}'.format(self.name, self.provider.name, self.price)

    def __str__(self):
        return self.name
Exemple #9
0
class TzWorld(models.Model):
    """
    table from http://efele.net/maps/tz/world/ with timezones and areas
    infos; http://shisaa.jp/postset/postgis-and-postgresql-in-action-timezones.html
    """
    gid = models.AutoField(primary_key=True)
    tzid = models.CharField(max_length=30, blank=True)
    geom = PolygonField(blank=True, null=True)

    class Meta:
        # managed = False
        db_table = 'tz_world'
        required_db_features = ['gis_enabled']
Exemple #10
0
class Polygon(models.Model):
    """
    A model that defines a polygon with a foreign key to Provider.
    """
    name = models.CharField(
        max_length=100,
        verbose_name='Service Area Name',
    )
    price = models.DecimalField(max_digits=10, decimal_places=2)
    provider = models.ForeignKey('Provider', on_delete=models.CASCADE)
    geojson = PolygonField(verbose_name='Coordinates', db_index=True)

    def __str__(self):
        return self.name
Exemple #11
0
class ServiceArea(models.Model):
    class Meta:
        verbose_name = "Область обслуживания"
        verbose_name_plural = "Области обслуживания"

    supplier = models.ForeignKey("Supplier", on_delete=models.CASCADE)
    name = models.CharField("Название", max_length=255)
    types = models.ManyToManyField(
        ServiceType, through="TypeInArea", verbose_name="Типы обслуживания"
    )
    geometry = PolygonField("Область")

    def __str__(self):
        return str(self.name)
Exemple #12
0
    def get_queryset(self):
        """
        This view should return a list of all the purchases
        for the currently authenticated user.
        """

        if not self.request.query_params.get('x1'):
            raise exceptions.ValidationError(detail='x1 is required')
        else:
            x1 = float(self.request.query_params.get('x1'))

        if not self.request.query_params.get('y1', False):
            raise exceptions.ValidationError(detail='y1 is required')
        else:
            y1 = float(self.request.query_params.get('y1'))

        if not self.request.query_params.get('x2', False):
            raise exceptions.ValidationError(detail='x2 is required')
        else:
            x2 = float(self.request.query_params.get('x2'))

        if not self.request.query_params.get('y2', False):
            raise exceptions.ValidationError(detail='y2 is required')
        else:
            y2 = float(self.request.query_params.get('y2'))

        store_queryset = Project.objects.annotate(
            point=models.expressions.Func(F('longitude'),
                                          F('latitude'),
                                          function='ST_Point',
                                          output_field=PointField()),
            poly=models.expressions.Func(
                x1,
                y1,
                x2,
                y2,
                srid=4326,
                function='ST_MakeEnvelope',
                output_field=PolygonField())).filter(poly__contains=F('point'))

        if len(store_queryset) <= 0:
            raise exceptions.ValidationError(
                detail='По данному запросу нет подходящих проектов')
        return store_queryset
Exemple #13
0
class ServiceArea(AbstractClass):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, blank=False)
    price = models.FloatField(blank=False)
    polygon = PolygonField(blank=False)
    transport_provider = models.ForeignKey(TransportationProvider)
Exemple #14
0
class Ntopoly(Model):
    figure = PolygonField(srid=4326, unique=True)
Exemple #15
0
class Advertising(Model):
    figure = PolygonField(srid=4326, unique=True)
class ServiceArea(StrMixin, models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    name = models.CharField(max_length=256)
    poly = PolygonField()
Exemple #17
0
class SpatialCoverage(models.Model):
    """ Spatial Coverage of a Keyword bound to a specifc source document"""
    stelle = models.ManyToManyField(
        "Stelle",
        related_name='has_spatial_coverage',
        blank=True,
        verbose_name="Stelle",
        help_text="Stelle",
    ).set_extra(is_public=True, )
    key_word = models.ForeignKey(
        "KeyWord",
        related_name='has_spatial_coverage',
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        verbose_name="Stichwort",
        help_text="Stichwort",
    ).set_extra(
        is_public=True,
        arche_prop="hasSubject",
    )

    kommentar = models.TextField(
        blank=True,
        null=True,
        verbose_name="Kommentar",
        help_text="Kommentar",
    ).set_extra(
        is_public=True,
        arche_prop="hasNote",
    )
    fuzzy_geom = PolygonField(
        blank=True,
        null=True,
        verbose_name="unsichere Ortsangabe",
        help_text="Ungefähre Lokalisierung einer Region",
    ).set_extra(
        is_public=True,
        arche_prop="hasWkt",
    )
    fuzzyness = models.IntegerField(
        choices=[(i, i) for i in range(1, 11)],
        blank=True,
        default=1,
        verbose_name="Sicherheitsindikator",
        help_text="1 sehr sicher, 10 sehr unsicher").set_extra(
            is_public=True, )

    class Meta:

        ordering = [
            'id',
        ]
        verbose_name = "Spatial Coverage"

    def __str__(self):
        return f"{self.stelle.all()} - {self.key_word}"

    def field_dict(self):
        return model_to_dict(self)

    @classmethod
    def get_source_table(self):
        return None

    @classmethod
    def get_listview_url(self):
        return reverse('archiv:spatialcoverage_browse')

    @classmethod
    def get_natural_primary_key(self):
        return "id"

    @classmethod
    def get_createview_url(self):
        return reverse('archiv:spatialcoverage_create')

    def get_absolute_url(self):
        return reverse('archiv:spatialcoverage_detail', kwargs={'pk': self.id})

    def get_delete_url(self):
        return reverse('archiv:spatialcoverage_delete', kwargs={'pk': self.id})

    def get_edit_url(self):
        return reverse('archiv:spatialcoverage_edit', kwargs={'pk': self.id})

    def get_next(self):
        next = self.__class__.objects.filter(id__gt=self.id)
        if next:
            return reverse('archiv:spatialcoverage_detail',
                           kwargs={'pk': next.first().id})
        return False

    def get_prev(self):
        prev = self.__class__.objects.filter(id__lt=self.id).order_by('-id')
        if prev:
            return reverse('archiv:spatialcoverage_detail',
                           kwargs={'pk': prev.first().id})
        return False
Exemple #18
0
class Buildings(Model):
    figure = PolygonField(srid=4326, unique=True)
Exemple #19
0
class Route(models.Model):
    """
    A route is a territory which is used to deliver a product easily, allowing us to organize the delivery of the
    product for the different distributors. There are routes that are parents of other routes in hierarchy.
    """
    number = models.IntegerField(primary_key=True, verbose_name=_('Number'))
    name = models.CharField(max_length=40,
                            verbose_name=_('Name'),
                            blank=True,
                            null=True)
    state = models.CharField(max_length=20,
                             verbose_name=_('State'),
                             blank=True,
                             null=True)
    description = models.TextField(blank=True, verbose_name=_('Description'))
    distributor = models.CharField(max_length=40,
                                   blank=True,
                                   verbose_name=_('Distributor'))
    phone = models.CharField(max_length=20,
                             blank=True,
                             verbose_name=_('Phone'))
    mobile = models.CharField(max_length=20,
                              blank=True,
                              verbose_name=_('Mobile'))
    email = models.CharField(max_length=100,
                             blank=True,
                             verbose_name=_('Email'))
    delivery_place = models.CharField(max_length=40,
                                      blank=True,
                                      verbose_name=_('Delivery place'))
    arrival_time = models.TimeField(blank=True,
                                    null=True,
                                    verbose_name=_('Arrival time'))
    additional_copies = models.PositiveSmallIntegerField(
        default=3, verbose_name=_('Additional copies'))
    directions = models.TextField(blank=True, verbose_name=_('Directions'))
    distributor_directions = models.TextField(
        null=True, blank=True, verbose_name=_('Distributor directions'))
    notes = models.TextField(blank=True, verbose_name=_('Notes'))
    beach = models.BooleanField(default=False, verbose_name=_('Beach'))
    active = models.BooleanField(default=True, verbose_name=_('Active'))
    print_labels = models.BooleanField(
        default=True, verbose_name=_('Print labels from this route'))
    price_per_copy = models.DecimalField(max_digits=10,
                                         decimal_places=2,
                                         blank=True,
                                         null=True,
                                         verbose_name=_('Price per copy'))
    parent_route = models.ForeignKey('self',
                                     related_name='child_route',
                                     blank=True,
                                     null=True,
                                     verbose_name=_('Parent route'))
    the_geom = PolygonField(blank=True, null=True, srid=32721)

    def __unicode__(self):
        return _('Route %d') % self.number

    class Meta:
        verbose_name = _('Route')
        verbose_name_plural = _('Routes')
        ordering = ('number', )

    def sum_copies_per_product(self, product=None, new=False):
        """
        Returns a dictionary with the total sum of products per route.

        If a product is passed, then it only shows a sum of the selected product.

        If "new" is passed as True, then only the people who are new subscribers (subscription date between today
        and a week ago) are going to be shown.
        """
        if product is None:
            subprods = SubscriptionProduct.objects.filter(
                route=self, subscription__active=True)
        else:
            subprods = SubscriptionProduct.objects.filter(
                route=self, product=product, subscription__active=True)
        if new:
            subprods = subprods.filter(
                subscription__start_date__gte=date.today() - timedelta(7))
        subprods = subprods.aggregate(Sum('copies'))
        return subprods['copies__sum']

    def sum_promos_per_product(self, product=None):
        """
        Returns a dictionary with the total sum of products per route, except it ONLY shows promotion type
        subscriptions.

        If a product is passed, then it only shows a sum of the selected product.

        If "new" is passed as True, then only the people who are new subscribers (subscription date between today
        and a week ago) are going to be shown.
        """
        if product is None:
            subprods = SubscriptionProduct.objects.filter(
                route=self, subscription__active=True,
                subscription__type='P').aggregate(Sum('copies'))
        else:
            subprods = SubscriptionProduct.objects.filter(
                route=self,
                product=product,
                subscription__active=True,
                subscription__type='P').aggregate(Sum('copies'))
        return subprods['copies__sum']

    def contacts_in_route_count(self):
        """
        Returns a count of how many distinct contacts there are in this route.
        """
        subprods = SubscriptionProduct.objects.filter(
            route=self).distinct('subscription__contact')
        return subprods.count

    def invoices_in_route(self):
        """
        Returns a count of how many invoices have been printed for this route, in a period between a week ago and
        today.
        """
        from invoicing.models import Invoice
        invoices = Invoice.objects.filter(
            route=self.number,
            print_date__range=(date.today() - timedelta(6), date.today()),
            canceled=False).count()
        return invoices

    def get_subscriptionproducts(self, product_id=None, isoweekday=None):
        queryset = self.subscriptionproduct_set.filter(
            subscription__active=True)
        if product_id:
            queryset = queryset.filter(product_id=product_id)
        if isoweekday:
            queryset = queryset.filter(product__weekday=isoweekday)
        return queryset

    def get_subscriptionproducts_count(self):
        return self.get_subscriptionproducts().count()

    def get_subscriptionproducts_today_count(self):
        today_isoweekday = date.today().isoweekday()
        return self.get_subscriptionproducts(
            isoweekday=today_isoweekday).count()

    def get_subscriptionproducts_tomorrow_count(self):
        tomorrow_isoweekday = (date.today() + timedelta(1)).isoweekday()
        return self.get_subscriptionproducts(
            isoweekday=tomorrow_isoweekday).count()
Exemple #20
0
class HapaPlaceName(models.Model):
    """ Ortsname """
    name = models.CharField(
        max_length=250,
        blank=True,
        verbose_name="Name",
        help_text="Standardisierte Namensansetzung",
    ).set_extra(
        is_public=True,
        arche_prop="hasTitle",
    )
    alternative_names = models.TextField(
        blank=True,
        verbose_name="Alternative Namen",
        help_text="Alternative Namen, verwende '; ' als Trennzeichen",
    ).set_extra(
        is_public=True,
        arche_prop="hasAlternativeTitle",
    )
    historic_names = models.TextField(
        blank=True,
        verbose_name="Historische(r) Name(n)",
        help_text="Historische(r) Name(n), verwende '; ' als Trennzeichen",
    ).set_extra(is_public=True, )
    geonames = models.ForeignKey(
        GeoNamesPlace,
        related_name='rvn_hapaplacename_geonames_geonamesplace',
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        verbose_name="GeoNames Eintrag",
        help_text="Name für Ort in GeoNames",
    ).set_extra(
        is_public=True,
        arche_prop="hasNonLinkedId",
        arche_prop_str_template="GeoNames ID: <value>",
    )
    beleg = models.ManyToManyField(
        "HapaBeleg",
        related_name='rvn_hapaplacename_beleg_beleg',
        blank=True,
        verbose_name="Beleg",
        help_text="Dokumentation der Belege mit ausgewählten Quellenzitaten",
    ).set_extra(is_public=True, )
    wortbildung = RichTextField(
        blank=True,
        null=True,
        verbose_name="Wortbildung",
        help_text="Besprechung der Wortbildung des Ortsnamens",
    ).set_extra(is_public=True, )
    etymology = RichTextField(
        blank=True,
        null=True,
        verbose_name="Etymologie",
        help_text="Besprechung der Etymologie des Ortsnamens",
    ).set_extra(is_public=True, )
    syntax = RichTextField(
        blank=True,
        null=True,
        verbose_name="Syntax",
        help_text="Besprechung der Syntax des Ortsnamens",
    ).set_extra(is_public=True, )
    orig_sprache = models.ForeignKey(
        SkosConcept,
        related_name='rvn_hapaplacename_orig_sprache_skosconcept',
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        verbose_name="Sprache",
        help_text="welcher Sprache entstammt der Ortsname",
    ).set_extra(
        is_public=True,
        arche_prop="hasLanguage",
    )
    lat = models.FloatField(
        blank=True,
        null=True,
        verbose_name="Breitengrad",
        help_text="Latitude",
    ).set_extra(is_public=True, )
    long = models.FloatField(
        blank=True,
        null=True,
        verbose_name="Längengrad",
        help_text="Longitude",
    ).set_extra(is_public=True, )
    point = PointField(
        blank=True,
        null=True,
        verbose_name="Koordinaten",
        help_text="Wird aus den Angaben von Beiten- und Längengrad befüllt)",
    ).set_extra(
        is_public=True,
        arche_prop="hasWkt",
    )
    fuzzy_geom = PolygonField(
        blank=True,
        null=True,
        verbose_name="Ungefähre Ortsangabe",
        help_text="Ungefähre Lokalisierung historischer Orte",
    ).set_extra(
        is_public=True,
        arche_prop="hasWkt",
    )
    adm_unit = models.ForeignKey(
        SkosConcept,
        related_name='rvn_hapaplacename_adm_unit_skosconcept',
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        verbose_name="Administrative Einheit",
        help_text=
        "Angabe der politisch-administrativen Verortung in Region, Bezirk, Kreis, usw.",
    ).set_extra(is_public=True, )
    historic = models.BooleanField(
        default=False,
        help_text=
        "Historischer Ort bedeutet es gibt diesen Ort heute nicht mehr",
        verbose_name="Historischer Ort")
    tags = TaggableManager(blank=True)
    comment = RichTextField(
        blank=True,
        null=True,
        verbose_name="Kommentar",
        help_text="Kommentar",
    ).set_extra(is_public=True, )
    internal_comment = RichTextField(
        blank=True,
        null=True,
        verbose_name="Kommentar (intern)",
        help_text="Kommentar (intern)",
    ).set_extra(is_public=False, )
    unclear = models.BooleanField(default=False,
                                  help_text="Eintrag mit offenen Fragen",
                                  verbose_name="unklar")
    orig_data_csv = models.TextField(
        blank=True, null=True,
        verbose_name="The original data").set_extra(is_public=True)

    class Meta:

        ordering = [
            'name',
        ]
        verbose_name = "Ortsname"

    def save(self, *args, **kwargs):
        if not self.lat and self.geonames:
            self.lat = self.geonames.gn_lat
            self.long = self.geonames.gn_long
        if self.lat and self.long and not self.point:
            self.point = Point(self.long, self.lat)
        if self.point:
            self.long, self.lat = self.point.coord_seq[0]

        super(HapaPlaceName, self).save(*args, **kwargs)

    def __str__(self):
        if self.name:
            return "{}".format(self.name)
        else:
            return "{}".format(self.id)

    def field_dict(self):
        return model_to_dict(self)

    @classmethod
    def get_listview_url(self):
        return reverse('archiv:hapaplacename_browse')

    @classmethod
    def get_source_table(self):
        return None

    @classmethod
    def get_natural_primary_key(self):
        return "id"

    @classmethod
    def get_createview_url(self):
        return reverse('archiv:hapaplacename_create')

    def get_absolute_url(self):
        return reverse('archiv:hapaplacename_detail', kwargs={'pk': self.id})

    def get_delete_url(self):
        return reverse('archiv:hapaplacename_delete', kwargs={'pk': self.id})

    def get_edit_url(self):
        return reverse('archiv:hapaplacename_edit', kwargs={'pk': self.id})

    def get_next(self):
        next = self.__class__.objects.filter(id__gt=self.id)
        if next:
            return reverse('archiv:hapaplacename_detail',
                           kwargs={'pk': next.first().id})
        return False

    def get_prev(self):
        prev = self.__class__.objects.filter(id__lt=self.id).order_by('-id')
        if prev:
            return reverse('archiv:hapaplacename_detail',
                           kwargs={'pk': prev.first().id})
        return False

    def as_geojson(self):
        geom_field = 'point'
        if self.fuzzy_geom:
            geom_field = 'fuzzy_geom'
        output = serialize('geojson',
                           HapaPlaceName.objects.filter(id=self.id),
                           geometry_field=geom_field,
                           fields=(
                               'id',
                               'name',
                           ))
        return json.loads(output)["features"][0]

    def geojson_id(self):
        return f"geojson-{self.id}"