summaryrefslogtreecommitdiff
path: root/chimere/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/models.py')
-rw-r--r--chimere/models.py44
1 files changed, 28 insertions, 16 deletions
diff --git a/chimere/models.py b/chimere/models.py
index fdd1e4b..be84036 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -309,6 +309,13 @@ class SubCategory(models.Model):
def item_nb(self):
return Marker.objects.filter(categories=self).count()
+STATUS = (('S', _(u'Submited')),
+ ('A', _(u'Available')),
+ ('M', _(u'Modified')),
+ ('D', _(u'Disabled')),
+ ('I', _(u'Imported')))
+STATUS_DCT = dict(STATUS)
+
IMPORTERS = {'KML':KMLManager,
'OSM':OSMManager,
'SHP':ShapefileManager,
@@ -365,6 +372,8 @@ class Importer(models.Model):
u"a marker to a way"), default=False)
automatic_update = models.BooleanField(_(u"Automatically updated"),
default=False)
+ default_status = models.CharField(_(u"Default status"), max_length=1,
+ choices=STATUS, default='I')
default_localisation = PointField(_(u"Default localisation"),
srid=settings.CHIMERE_EPSG_DISPLAY_PROJECTION,
blank=True, null=True,
@@ -413,13 +422,6 @@ class ImporterKeyCategories(models.Model):
class Meta:
verbose_name = _(u"Importer - Key categories")
-STATUS = (('S', _(u'Submited')),
- ('A', _(u'Available')),
- ('M', _(u'Modified')),
- ('D', _(u'Disabled')),
- ('I', _(u'Imported')))
-STATUS_DCT = dict(STATUS)
-
class GeographicItem(models.Model):
name = models.CharField(_(u"Name"), max_length=150)
categories = SelectMultipleField(SubCategory)
@@ -478,7 +480,12 @@ class GeographicItem(models.Model):
if not _set:
new_keys += '%s:%s;' % (key, value)
self.import_key = new_keys
+ modified_since_import = self.modified_since_import
self.save()
+ # preserve modified_since_import
+ if modified_since_import != self.modified_since_import:
+ self.modified_since_import = modified_since_import
+ self.save()
def has_modified(self):
if (self.ref_item and self.ref_item != self) \
@@ -711,7 +718,8 @@ class Marker(GeographicItem):
return url
PRE_ATTRS = {
- 'Marker':('name', 'geometry', 'import_version', 'modified_since_import'),
+ 'Marker':('name', 'description', 'start_date', 'geometry', 'import_version',
+ 'modified_since_import'),
'Route':('name', 'geometry', 'import_version', 'modified_since_import'),
'Area':('urn', 'name'),
}
@@ -722,8 +730,9 @@ def geometry_pre_save(cls, pre_save_geom_values):
instance = kwargs['instance']
try:
instance = cls.objects.get(pk=instance.pk)
- pre_save_geom_values[instance.pk] = [getattr(instance, attr)
- for attr in PRE_ATTRS[cls.__name__]]
+ pre_save_geom_values[instance.pk] = dict(
+ [(attr, getattr(instance, attr))
+ for attr in PRE_ATTRS[cls.__name__]])
except ObjectDoesNotExist:
pass
return geom_pre_save
@@ -741,24 +750,25 @@ def geometry_post_save(pre_save_geom_values):
or kwargs['instance'].pk not in pre_save_geom_values:
return
instance = kwargs['instance']
- name, geometry, import_version, modified_since_import = \
- pre_save_geom_values[instance.pk]
+ pre = pre_save_geom_values[instance.pk]
# force the reinit of modified_since_import
- if modified_since_import != instance.modified_since_import:
+ if pre['modified_since_import'] != instance.modified_since_import:
return
- if (instance.import_version != import_version
+ if (instance.import_version != pre['import_version']
and instance.modified_since_import):
instance.modified_since_import = False
instance.save()
return
if instance.modified_since_import:
return
- if instance.name != name or instance.geometry != geometry:
+ if [key for key in pre if pre not in ('import_version',
+ 'modified_since_import') and
+ getattr(instance, key) != pre[key]]:
instance.modified_since_import = True
instance.save()
return geom_post_save
def marker_post_save(sender, **kwargs):
- if not kwargs['instance']:
+ if not kwargs['instance'] or kwargs['created']:
return
geometry_post_save(pre_save_marker_values)(sender, **kwargs)
post_save.connect(marker_post_save, sender=Marker)
@@ -1600,6 +1610,8 @@ class Property(models.Model):
value = models.TextField(_(u"Value"))
def __unicode__(self):
if self.propertymodel.type == 'C':
+ if not self.value:
+ return ''
try:
return unicode(PropertyModelChoice.objects.get(
pk=self.value).value)