|
@@ -134,11 +134,18 @@ class CdrUserEvents(CdrEvents):
|
|
|
self._user = user
|
|
self._user = user
|
|
|
self._events = []
|
|
self._events = []
|
|
|
self.start = 0
|
|
self.start = 0
|
|
|
|
|
+ self.answered = 0
|
|
|
self.end = 0
|
|
self.end = 0
|
|
|
|
|
+ self.recordingfile = ''
|
|
|
def add(self, event):
|
|
def add(self, event):
|
|
|
if not isinstance(event, CdrEvent):
|
|
if not isinstance(event, CdrEvent):
|
|
|
event = CdrEvent(event)
|
|
event = CdrEvent(event)
|
|
|
if self._user in (event.src, event.dst, event.cnum):
|
|
if self._user in (event.src, event.dst, event.cnum):
|
|
|
|
|
+ if (self.answer ==0) and (event.disposition == 'ANSWERED'):
|
|
|
|
|
+ self.answer = event.calldate + event.duration - event.billsec
|
|
|
|
|
+ self.recordingfile = event.recordingfile
|
|
|
|
|
+ if (self.recordingfile == ''):
|
|
|
|
|
+ self.recordingfile = event.recordingfile
|
|
|
if len(self._events) == 0:
|
|
if len(self._events) == 0:
|
|
|
self.start = event.calldate
|
|
self.start = event.calldate
|
|
|
self.end = event.calldate + td(seconds=event.duration)
|
|
self.end = event.calldate + td(seconds=event.duration)
|
|
@@ -255,7 +262,7 @@ class CdrUserCall(CdrCall):
|
|
|
self.linkedid = None
|
|
self.linkedid = None
|
|
|
@property
|
|
@property
|
|
|
def file(self):
|
|
def file(self):
|
|
|
- return self.events.first.recordingfile
|
|
|
|
|
|
|
+ return self.events.recordingfile
|
|
|
@property
|
|
@property
|
|
|
def src(self):
|
|
def src(self):
|
|
|
return self.events.first.cnum
|
|
return self.events.first.cnum
|
|
@@ -276,20 +283,20 @@ class CdrUserCall(CdrCall):
|
|
|
return None
|
|
return None
|
|
|
@property
|
|
@property
|
|
|
def duration(self):
|
|
def duration(self):
|
|
|
- if not self.isAnswered:
|
|
|
|
|
|
|
+ if not self.events.answer == 0
|
|
|
return 0
|
|
return 0
|
|
|
else:
|
|
else:
|
|
|
- return self.events.first.billsec
|
|
|
|
|
|
|
+ return self.events.end - self.events.answer
|
|
|
@property
|
|
@property
|
|
|
def waiting(self):
|
|
def waiting(self):
|
|
|
- if not self.isAnswered:
|
|
|
|
|
- return self.events.first.duration
|
|
|
|
|
|
|
+ if not self.event.answer == 0:
|
|
|
|
|
+ return self.events.end - self.events.start
|
|
|
else:
|
|
else:
|
|
|
# TODO: exclude time on ivr
|
|
# TODO: exclude time on ivr
|
|
|
- return self.events.first.duration - self.duration
|
|
|
|
|
|
|
+ return self.events.answer - self.events.start
|
|
|
@property
|
|
@property
|
|
|
def isAnswered(self):
|
|
def isAnswered(self):
|
|
|
- return self.disposition == 'ANSWERED';
|
|
|
|
|
|
|
+ return self.events.answer != 0;
|
|
|
@property
|
|
@property
|
|
|
def simple(self):
|
|
def simple(self):
|
|
|
return {'start': self.start,
|
|
return {'start': self.start,
|