forked from 0x2620/pandora
create undefined places/events
This commit is contained in:
parent
daaabba071
commit
1f1683c5a5
7 changed files with 120 additions and 43 deletions
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue