update place/event matches in sync

This commit is contained in:
j 2012-02-20 14:09:26 +00:00
parent 2ec0cfccb4
commit c49cc47c3d
4 changed files with 24 additions and 13 deletions

View file

@ -90,8 +90,13 @@ class Event(models.Model):
def update_matches(self): def update_matches(self):
matches = self.get_matches() matches = self.get_matches()
numberofmatches = matches.count() numberofmatches = matches.count()
for i in self.annotations.exclude(id__in=matches): for a in self.annotations.exclude(id__in=matches):
self.annotations.remove(i) self.annotations.remove(a)
#annotations of type event always need an event
if a.get_layer().get('type') == 'event' and a.events.count() == 0:
a.events.add(Event.get_or_create(a.value))
for e in a.events.all():
e.update_matches()
for i in matches.exclude(id__in=self.annotations.all()): for i in matches.exclude(id__in=self.annotations.all()):
#need to check again since editEvent might have been called again #need to check again since editEvent might have been called again
if self.annotations.filter(id=i.id).count() == 0: if self.annotations.filter(id=i.id).count() == 0:
@ -103,10 +108,10 @@ class Event(models.Model):
if self.items.filter(id=i.id).count() == 0: if self.items.filter(id=i.id).count() == 0:
self.items.add(i) self.items.add(i)
if self.matches != numberofmatches: if self.matches != numberofmatches:
self.matches = numberofmatches
if numberofmatches: if numberofmatches:
Event.objects.filter(id=self.id).update(matches=numberofmatches) Event.objects.filter(id=self.id).update(matches=numberofmatches)
else: else:
self.matches = numberofmatches
self.save() self.save()
def set_name_sort(self, value=None): def set_name_sort(self, value=None):
@ -123,7 +128,7 @@ class Event(models.Model):
self.set_name_sort() self.set_name_sort()
self.name_find = '||' + self.name + '||'.join(self.alternativeNames) + '||' self.name_find = '||' + self.name + '||'.join(self.alternativeNames) + '||'
self.defined = len(filter(None, [getattr(self, key) self.defined = len(filter(None, [getattr(self, key)
for key in ('start', 'end', 'startTime', 'endTime')])) > 0 for key in ('start', 'end')])) > 0
if self.endTime and self.startTime: if self.endTime and self.startTime:
self.durationTime = self.endTime - self.startTime self.durationTime = self.endTime - self.startTime

View file

@ -14,7 +14,6 @@ from ox.django.api import actions
from item import utils from item import utils
import models import models
import tasks
@login_required_json @login_required_json
def addEvent(request): def addEvent(request):
@ -48,8 +47,9 @@ def addEvent(request):
setattr(event, key, value) setattr(event, key, value)
if 'nameSort' in data: if 'nameSort' in data:
event.set_name_sort(data['nameSort']) event.set_name_sort(data['nameSort'])
event.matches = 0
event.save() event.save()
tasks.update_matches.delay(event.id) event.update_matches.()
response = json_response(status=200, text='created') response = json_response(status=200, text='created')
response['data'] = event.json() response['data'] = event.json()
else: else:
@ -96,7 +96,7 @@ def editEvent(request):
event.set_name_sort(data['nameSort']) event.set_name_sort(data['nameSort'])
event.save() event.save()
if 'name' in data or 'alternativeNames' in data: if 'name' in data or 'alternativeNames' in data:
tasks.update_matches.delay(event.id) event.update_matches()
response = json_response(status=200, text='updated') response = json_response(status=200, text='updated')
response['data'] = event.json() response['data'] = event.json()
else: else:

View file

@ -13,6 +13,7 @@ from ox.django import fields
import managers import managers
from annotation.models import Annotation, get_matches from annotation.models import Annotation, get_matches
from annotation.tasks import update_matching_places
from item.models import Item from item.models import Item
from changelog.models import Changelog from changelog.models import Changelog
@ -102,8 +103,13 @@ class Place(models.Model):
def update_matches(self): def update_matches(self):
matches = self.get_matches() matches = self.get_matches()
numberofmatches = matches.count() numberofmatches = matches.count()
for i in self.annotations.exclude(id__in=matches): for a in self.annotations.exclude(id__in=matches):
self.annotations.remove(i) self.annotations.remove(a)
#annotations of type place always need a place
if a.get_layer().get('type') == 'place' and a.places.count() == 0:
a.places.add(Place.get_or_create(a.value))
for p in a.places.all():
p.update_matches()
for i in matches.exclude(id__in=self.annotations.all()): for i in matches.exclude(id__in=self.annotations.all()):
#need to check again since editEvent might have been called again #need to check again since editEvent might have been called again
if self.annotations.filter(id=i.id).count() == 0: if self.annotations.filter(id=i.id).count() == 0:
@ -115,10 +121,10 @@ class Place(models.Model):
if self.items.filter(id=i.id).count() == 0: if self.items.filter(id=i.id).count() == 0:
self.items.add(i) self.items.add(i)
if self.matches != numberofmatches: if self.matches != numberofmatches:
self.matches = numberofmatches
if numberofmatches: if numberofmatches:
Place.objects.filter(id=self.id).update(matches=numberofmatches) Place.objects.filter(id=self.id).update(matches=numberofmatches)
else: else:
self.matches = numberofmatches
self.save() self.save()
def make_undefined(self): def make_undefined(self):

View file

@ -15,7 +15,6 @@ from ox.django.api import actions
from item import utils from item import utils
import models import models
import tasks
@login_required_json @login_required_json
def addPlace(request): def addPlace(request):
@ -64,8 +63,9 @@ def addPlace(request):
if isinstance(value, list): if isinstance(value, list):
value = tuple(value) value = tuple(value)
setattr(place, key, value) setattr(place, key, value)
place.matches = 0
place.save() place.save()
tasks.update_matches.delay(place.id) place.update_matches()
response = json_response(place.json()) response = json_response(place.json())
else: else:
response = json_response(status=409, response = json_response(status=409,
@ -122,7 +122,7 @@ def editPlace(request):
setattr(place, key, value) setattr(place, key, value)
place.save() place.save()
if 'name' in data or 'alternativeNames' in data: if 'name' in data or 'alternativeNames' in data:
tasks.update_matches.delay(place.id) place.update_matches()
response = json_response(place.json()) response = json_response(place.json())
else: else:
response = json_response(status=409, response = json_response(status=409,