Skip to content
This repository has been archived by the owner on Apr 4, 2018. It is now read-only.

Commit

Permalink
API for triggering a per list type requeue.
Browse files Browse the repository at this point in the history
  • Loading branch information
jacquesbeukes committed Mar 25, 2015
1 parent fedab31 commit 49a212c
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 34 deletions.
10 changes: 9 additions & 1 deletion easyCall/apps/call_records/admin.py
@@ -1,5 +1,6 @@
from django.contrib import admin
from easyCall.apps.call_records.models import CallRecord, UserNote, Call
from easyCall.apps.call_records.models import CallRecord, UserNote
from easyCall.apps.call_records.models import Call, QueueEntry


class UserInline(admin.TabularInline):
Expand All @@ -18,8 +19,15 @@ class CallAdmin(admin.ModelAdmin):
list_filter = ('caller', 'result', 'start_time', 'end_time')


class QueueEntryAdmin(admin.ModelAdmin):
list_display = ('call_record', 'list_type', 'date_added')
list_filter = ('date_added',)
pass


admin.site.register(CallRecord, CallRecordAdmin)
admin.site.register(Call, CallAdmin)
admin.site.register(QueueEntry, QueueEntryAdmin)



40 changes: 12 additions & 28 deletions easyCall/apps/call_records/importer.py
Expand Up @@ -5,6 +5,9 @@
from django.utils import timezone

from django.conf import settings
from django.db.models import Q
from django.db import IntegrityError

from easyCall.apps.call_records.models import CallRecord
from easyCall.apps.call_records.models import QueueEntry
from easyCall.apps.call_records.models import ExtraInformation
Expand Down Expand Up @@ -227,31 +230,12 @@ def save_extras(list_type, row, record):



def populate_queue():
# TODO: things will get hairy if the queue is completely empty
queue_size = QueueEntry.objects.count()

if queue_size > 0:
print("there is something in the queue")
# Figure out the earliest time we can repopulate
timezone.activate(pytz.timezone(settings.TIME_ZONE))
last_update = QueueEntry.objects.last().date_added
print(last_update)
delta = timedelta(minutes=2)
now = timezone.now()

if now < (last_update + delta):
print("too soon, can't repopulate")
return False

# repopulate queue
_do_queue_repopulation()
return True


def _do_queue_repopulation():
records = CallRecord.objects.filter(status=CallRecord.NEW)
for record in records:
entry = QueueEntry(call_record=record,
list_type=record.list_type)
entry.save()
def populate_queue(slug):
records = CallRecord.objects.filter(Q(status=CallRecord.NEW) | Q(status=CallRecord.IN_PROGRESS))
for record in records.filter(list_type=slug):
try:
entry = QueueEntry(call_record=record,
list_type=record.list_type)
entry.save()
except IntegrityError as ie:
pass # Nothing to do
20 changes: 20 additions & 0 deletions easyCall/apps/call_records/migrations/0015_auto_20150323_2221.py
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('call_records', '0014_auto_20150315_1453'),
]

operations = [
migrations.AlterField(
model_name='queueentry',
name='call_record',
field=models.OneToOneField(to='call_records.CallRecord'),
preserve_default=True,
),
]
10 changes: 6 additions & 4 deletions easyCall/apps/call_records/models.py
Expand Up @@ -73,8 +73,10 @@ def update_status(self, category):

def handle_dequeue(self):
if self.status == self.DEQUEUED:
if self.queueentry_set.exists():
self.queueentry_set.all().delete()
try:
self.queueentry.delete()
except AttributeError:
pass # There is nothing to delete

def __unicode__(self):
"""CallRecord to_string method."""
Expand All @@ -83,11 +85,11 @@ def __unicode__(self):

class QueueEntry(models.Model):
list_type = models.ForeignKey(ListType)
call_record = models.ForeignKey(CallRecord)
call_record = models.OneToOneField(CallRecord)
date_added = models.DateTimeField(auto_now_add=True)

def __unicode__(self):
"""CallRecord to_string method."""
"""QueueEntry to_string method."""
return "{} ({})".format(self.call_record.id, self.list_type.slug)


Expand Down
8 changes: 7 additions & 1 deletion easyCall/apps/lists/views.py
Expand Up @@ -6,6 +6,7 @@
from easyCall.apps.lists.models import ListType
from easyCall.apps.lists.report import TypeReport
from easyCall.apps.lists.serializers import ListTypeSerializer, ListTypeReportSerializer
from easyCall.apps.call_records.importer import populate_queue


class ListTypeList(APIView):
Expand Down Expand Up @@ -53,9 +54,14 @@ def get(self, request, slug, format=None):
serializer = ListTypeReportSerializer(record)
return Response(serializer.data)

def put(self, request, slug, format=None):
record = self._get_object(slug)
populate_queue(slug)
serializer = ListTypeReportSerializer(record)
return Response(serializer.data)

def _get_object(self, slug):
try:
return TypeReport(list_type=slug)
except CallRecord.DoesNotExist:
raise Http404

0 comments on commit 49a212c

Please sign in to comment.