SciPost Code Repository

Skip to content
Snippets Groups Projects
models.py 1.87 KiB
Newer Older
from django.db import models
from django.core.urlresolvers import reverse

from staff.behaviors import WhiteLabelClientMixin, TimeStampedMixin

from .managers import LocationManager


class Location(WhiteLabelClientMixin):
    """
    Physical location to be related to WCLs.
    """
    code = models.CharField(max_length=64)
    client = models.ForeignKey('clients.Client', related_name='locations', blank=True, null=True)
    subtitle = models.CharField(max_length=128, blank=True)
    address = models.CharField(max_length=512)
    postal_code = models.CharField(max_length=512, blank=True)
    main_phone = models.CharField(max_length=32, blank=True)
    city = models.CharField(max_length=512, blank=True)
    description = models.TextField(blank=True)

    objects = LocationManager()

    class Meta:
        unique_together = ('white_label_client', 'code',)
        ordering = ('-code',)

    def __str__(self):
        return '%s, %s' % (self.address, self.city)

    def get_absolute_url(self):
        return reverse('locations:detailview', args=(self.code,))

    def get_edit_url(self):
        return reverse('locations:editview', args=(self.code,))


class GeoLocation(TimeStampedMixin):
    """
    Geocode which links `Location` objects to the 2D map.
    """
    location = models.OneToOneField('locations.Location')
    latitude = models.CharField(max_length=64)
    longitude = models.CharField(max_length=64)


class LocationObject(TimeStampedMixin):
    """
    An physical object can be assigned to a `Location` object.
    """
    location = models.ForeignKey('locations.Location', related_name='location_objects')
    code = models.CharField(max_length=64, blank=True)
    name = models.CharField(max_length=255)
    description = models.TextField(blank=True)

    def __str__(self):
        _str = self.name
        if self.code:
            _str += ' (%s)' % self.code
        return _str