|
@@ -161,7 +161,7 @@ async def getCDR(start=None,
|
|
|
end=None,
|
|
end=None,
|
|
|
table='cdr',
|
|
table='cdr',
|
|
|
field='calldate',
|
|
field='calldate',
|
|
|
- sort='CAST(linkedid AS DECIMAL(12,2)), CAST(uniqueid AS DECIMAL(12,2)), sequence'):
|
|
|
|
|
|
|
+ sort='calldate, SUBSTR(uniqueid,1,10), SUBSTR(uniqueid,12,2), sequence'):
|
|
|
_cdr = {}
|
|
_cdr = {}
|
|
|
if end is None:
|
|
if end is None:
|
|
|
end = dt.now()
|
|
end = dt.now()
|
|
@@ -809,52 +809,25 @@ class Calls(Resource):
|
|
|
@app.response(HTTPStatus.OK, 'JSON reply')
|
|
@app.response(HTTPStatus.OK, 'JSON reply')
|
|
|
@app.response(HTTPStatus.UNAUTHORIZED, 'Authorization required')
|
|
@app.response(HTTPStatus.UNAUTHORIZED, 'Authorization required')
|
|
|
async def get(self):
|
|
async def get(self):
|
|
|
- '''Returns aggregated call data JSON. NOT IMPLEMENTED.
|
|
|
|
|
|
|
+ '''Returns aggregated call data JSON. Draft implementation.
|
|
|
All request arguments are optional.
|
|
All request arguments are optional.
|
|
|
'''
|
|
'''
|
|
|
calls = []
|
|
calls = []
|
|
|
start = parseDatetime(request.args.get('start'))
|
|
start = parseDatetime(request.args.get('start'))
|
|
|
end = parseDatetime(request.args.get('end'))
|
|
end = parseDatetime(request.args.get('end'))
|
|
|
cdr = await getCDR(start, end)
|
|
cdr = await getCDR(start, end)
|
|
|
- for _call in cdr:
|
|
|
|
|
- _call0 = _call['events'][0]
|
|
|
|
|
- dcontext = _call0['dcontext']
|
|
|
|
|
- call = {'id':_call['id'],
|
|
|
|
|
- 'start':_call0['calldate'],
|
|
|
|
|
- 'type': None,
|
|
|
|
|
- 'numberA': None,
|
|
|
|
|
- 'numberB': None,
|
|
|
|
|
- 'line': None,
|
|
|
|
|
- 'duration': None,
|
|
|
|
|
- 'waiting': None,
|
|
|
|
|
- 'status':'NO ANSWER',
|
|
|
|
|
- 'url': None }
|
|
|
|
|
- for _c, _r in (('disposition','status'),
|
|
|
|
|
- ('src','numberA'),
|
|
|
|
|
- ('recordingfile','url')):
|
|
|
|
|
- if _c in _call0:
|
|
|
|
|
- call[_r] = _call0[_c]
|
|
|
|
|
- # if context in ('from-internal'):
|
|
|
|
|
-
|
|
|
|
|
- # if context in ('ext-queues'):
|
|
|
|
|
- # call['type'] = 'in'
|
|
|
|
|
- # if 'did' in _call0:
|
|
|
|
|
- # call['line'] = _call0['did']
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- # call['type'] = 'local'
|
|
|
|
|
- # else:
|
|
|
|
|
- # call['type'] = 'out'
|
|
|
|
|
- # call['numberB'] = _call0['dst']
|
|
|
|
|
- # else:
|
|
|
|
|
- # call['type'] = 'in'
|
|
|
|
|
- # if 'did' in _call0:
|
|
|
|
|
- # call['line'] = _call0['did']
|
|
|
|
|
- # if len(_call['events']) > 1:
|
|
|
|
|
- # for step in _call['events'][1:]:
|
|
|
|
|
-
|
|
|
|
|
- # pass
|
|
|
|
|
- calls.append(call)
|
|
|
|
|
|
|
+ for c in cdr:
|
|
|
|
|
+ _call = {'id':c.linkedid,
|
|
|
|
|
+ 'start':c.start,
|
|
|
|
|
+ 'type': c.direction,
|
|
|
|
|
+ 'numberA': c.src,
|
|
|
|
|
+ 'numberB': c.dst,
|
|
|
|
|
+ 'line': c.did,
|
|
|
|
|
+ 'duration': c.duration,
|
|
|
|
|
+ 'waiting': c.waiting,
|
|
|
|
|
+ 'status':c.disposition,
|
|
|
|
|
+ 'url': c.file }
|
|
|
|
|
+ calls.append(_call)
|
|
|
return successReply(calls)
|
|
return successReply(calls)
|
|
|
|
|
|
|
|
manager.connect()
|
|
manager.connect()
|