create undefined places/events

This commit is contained in:
j 2012-02-01 15:25:18 +00:00
commit 1f1683c5a5
7 changed files with 120 additions and 43 deletions

View file

@ -32,6 +32,7 @@ class Event(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
defined = models.BooleanField(default=False)
user = models.ForeignKey(User, null=True, related_name='events')
@ -46,14 +47,14 @@ class Event(models.Model):
#start yyyy-mm-dd|mm-dd|dow 00:00|00:00
start = models.CharField(default='', max_length=255)
startTime = models.BigIntegerField(default=0)
startTime = models.BigIntegerField(default=None, null=True)
#end yyyy-mm-dd|mm-dd|dow 00:00|00:01
end = models.CharField(default='', max_length=255)
endTime = models.BigIntegerField(default=0)
endTime = models.BigIntegerField(default=None, null=True)
duration = models.CharField(default='', max_length=255)
durationTime = models.BigIntegerField(default=0)
durationTime = models.BigIntegerField(default=None, null=True)
type = models.CharField(default='', max_length=255)
@ -64,9 +65,21 @@ class Event(models.Model):
def __unicode__(self):
return self.name
@classmethod
def get_or_create(model, name):
qs = model.objects.filter(name_find__icontains=u'|%s|'%name)
if qs.count() == 0:
instance = model(name=name)
instance.save()
else:
instance = qs[0]
return instance
def editable(self, user):
if user and not user.is_anonymous() \
and (self.user == user or user.get_profile().capability('canEditEvents')):
and (not self.user or \
self.user == user or \
user.get_profile().capability('canEditEvents')):
return True
return False
@ -109,9 +122,19 @@ class Event(models.Model):
if not self.name_sort:
self.set_name_sort()
self.name_find = '||' + self.name + '||'.join(self.alternativeNames) + '||'
self.durationTime = self.endTime - self.startTime
self.defined = len(filter(None, [getattr(self, key)
for key in ('start', 'end', 'startTime', 'endTime')])) > 0
if self.defined:
self.durationTime = self.endTime - self.startTime
super(Event, self).save(*args, **kwargs)
def make_undefined(self):
self.defined = False
self.start = ''
self.end = ''
self.durationTime = self.endTime = self.startTime = None
def get_id(self):
return ox.toAZ(self.id)

View file

@ -30,11 +30,14 @@ def addEvent(request):
data = json.loads(request.POST['data'])
existing_names = []
exists = False
for name in [data['name']] + data.get('alternativeNames', []):
if models.Event.objects.filter(name_find__icontains=u'|%s|'%name).count() != 0:
names = [data['name']] + data.get('alternativeNames', [])
for name in names:
if models.Event.objects.filter(defined=True,
name_find__icontains=u'|%s|'%name).count() != 0:
exists = True
existing_names.append(name)
if not exists:
models.Event.objects.filter(defined=False, name__in=names).delete()
event = models.Event(name = data['name'])
for key in ('start', 'startTime', 'end', 'endTime', 'duration', 'durationTime',
'type', 'alternativeNames'):
@ -74,10 +77,12 @@ def editEvent(request):
conflict_names = []
names = [data.get('name', event.name)] + data.get('alternativeNames', [])
for name in names:
if models.Event.objects.filter(name_find__icontains=u'|%s|'%name).exclude(id=event.id).count() != 0:
if models.Event.objects.filter(defined=True,
name_find__icontains=u'|%s|'%name).exclude(id=event.id).count() != 0:
conflict = True
conflict_names.append(name)
if not conflict:
models.Event.objects.filter(defined=False, name__in=names).delete()
if 'name' in data:
event.set_name_sort(data['name'])
for key in ('name', 'start', 'startTime', 'end', 'endTime', 'duration', 'durationTime',