Skip to content

Instantly share code, notes, and snippets.

@alexphelps
Created June 12, 2017 19:10
Show Gist options
  • Select an option

  • Save alexphelps/8ea6bc24dc58b29e945ccc8da97510fd to your computer and use it in GitHub Desktop.

Select an option

Save alexphelps/8ea6bc24dc58b29e945ccc8da97510fd to your computer and use it in GitHub Desktop.
Example Table Json
def get(self, request, company_id, **kwargs):
company_id = self.kwargs['company_id']
company = get_object_or_404(Company, pk=company_id)
company_timezone = timezone.activate(company.timezone)
range_from = timezone.now() + timedelta(days=-30)
if 'from' in request.GET:
range_from = datetime.strptime(
request.GET['from'],
'%m-%d-%Y'
)
range_from = timezone.make_aware(range_from)
range_to = timezone.now()
if 'to' in request.GET:
range_to = datetime.strptime(
request.GET['to'],
'%m-%d-%Y'
) + timedelta(hours=23, minutes=59, seconds=59)
range_to = timezone.make_aware(range_to)
all_calls = Call.objects.select_related('tracker', 'twilio_call').filter(
tracker__company=company).filter(timestamp__gte=range_from)
calls = all_calls.filter(
timestamp__lte=range_to
).order_by('-timestamp')
calls_table_data = {
'data': None
}
table_data = []
for call in calls:
call_status = ''
if call.status == 'answered':
call_status = '<span class="info-bubble info-bubble-small" '
call_status += 'title="Answered Call" placement="top">'
call_status += '<i class="material-icons md-18 text-success">'
call_status += 'call_received</i></span>'
if call.status == 'abandoned':
call_status = '<span class="info-bubble info-bubble-small" '
call_status += 'title="Abandoned Call" placement="top">'
call_status += '<i class="material-icons md-18">'
call_status += 'call_received</i></span>'
if call.status == 'missed':
call_status = '<span class="info-bubble info-bubble-small" '
call_status += 'title="Missed Call" placement="top">'
call_status += '<i class="material-icons md-18 text-danger">'
call_status += 'call_missed</i></span>'
formated_caller_name = '---'
if call.twilio_call.caller_name:
formated_caller_name = call.twilio_call.caller_name.title()
caller_name = call_status + '<a class="m-l-10" href="'
caller_name += reverse(
'calls:call_details', args=[company_id, call.id]
)
caller_name += '">' + formated_caller_name + '</a>'
if call.marked_spam:
caller_name = caller_name + '<span class="m-l-5 '
caller_name += 'label label-danger">Spam</span>'
caller_number = '---'
raw_number = call.twilio_call.caller
if raw_number is not None:
try:
parsed_number = phonenumbers.parse(
call.twilio_call.caller, None)
valid_number = phonenumbers.is_valid_number(parsed_number)
if valid_number:
formated_number = phonenumbers.format_number(
parsed_number,
phonenumbers.PhoneNumberFormat.NATIONAL
)
caller_number = formated_number
else:
caller_number = raw_number
except:
caller_number = raw_number
else:
caller_number = raw_number
tracker = call.tracker.name
call_time = timezone.localtime(
call.timestamp, timezone=company_timezone
).strftime("%b. %d, %Y, %I:%M %p")
call_duration = '---'
if not call.tracker.recording_enabled:
call_duration = sectodur(call.twilio_call.duration)
elif call.twilio_call.recording_duration:
call_duration = sectodur(call.twilio_call.recording_duration)
call_detail = '<a href="'
call_detail += reverse(
'calls:call_details', args=[company_id, call.id]
)
call_detail += '" class="material-icons md-18">more_horiz</a>'
table_data.append(
{
'caller_name': caller_name,
'caller_number': caller_number,
'tracker': tracker,
'call_time': call_time,
'call_duration': call_duration,
'call_detail': call_detail,
}
)
calls_table_data = {
'data': table_data
}
return HttpResponse(
json.dumps(calls_table_data),
content_type='application/json'
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment