Example #1
0
    def parse_calls(stat_common, stat_pbx_grouped, userprofile):
        coming = []
        incoming = []
        internal = []

        for stat_pbx_group in stat_pbx_grouped:

            call = CallRecord()
            pbx_incoming = filter(
                lambda x: x.destination == CallsConstants.INCOMING,
                stat_pbx_group)
            if len(pbx_incoming) is not 0:
                pbx_incoming_call = pbx_incoming[0]

                pbx_call_same_disp = None
                if not pbx_incoming_call.disposition in CallsConstants.FAIL_TYPES:
                    pbx_call_same_disp = filter(
                        lambda x: x.disposition == pbx_incoming_call.
                        disposition and not x.destination == CallsConstants.
                        INCOMING, stat_pbx_group)[0]
                else:
                    pbx_call_same_disp = filter(
                        lambda x: not x.destination == CallsConstants.INCOMING,
                        stat_pbx_group)
                    pbx_call_same_disp = stat_pbx_group[0] if len(
                        pbx_call_same_disp) == 0 else pbx_call_same_disp[0]

                call.set_params(call_id=pbx_call_same_disp.call_id,
                                clid=pbx_call_same_disp.clid,
                                sip=pbx_call_same_disp.sip,
                                date=pbx_call_same_disp.date,
                                destination=pbx_call_same_disp.destination,
                                disposition=pbx_incoming_call.disposition,
                                bill_seconds=pbx_incoming_call.seconds)

            else:
                pbx_call = stat_pbx_group[0]
                call.set_params(call_id=pbx_call.call_id,
                                clid=pbx_call.clid,
                                sip=pbx_call.sip,
                                date=pbx_call.date,
                                destination=pbx_call.destination,
                                disposition=pbx_call.disposition,
                                bill_seconds=pbx_call.seconds)

            if PBXDataService.is_number_known(call.clid, userprofile):
                # звонок исходящий либо внутренний

                if PBXDataService.is_number_known(call.destination,
                                                  userprofile):
                    # номер известный - звонок внутренний
                    call.call_type = CallsConstants.INTERNAL
                    if call.disposition in CallsConstants.FAIL_TYPES:
                        call.destination = ''
                    internal.append(call)
                else:
                    # звонок исходящий
                    call.call_type = CallsConstants.COMING
                    if call.disposition in CallsConstants.FAIL_TYPES:
                        call.destination = ''
                    coming.append(call)
            else:
                # звонок входящий
                call.call_type = CallsConstants.INCOMING
                if call.disposition in CallsConstants.FAIL_TYPES:
                    call.destination = ''
                incoming.append(call)

        return coming + incoming + internal
	def parse_calls(stat_common, stat_pbx_grouped, userprofile):
		coming = []
		incoming = []
		internal = []

		for stat_pbx_group in stat_pbx_grouped:

			call = CallRecord()
			pbx_incoming = filter(lambda x: x.destination == CallsConstants.INCOMING, stat_pbx_group)
			if len(pbx_incoming) is not 0:
				pbx_incoming_call = pbx_incoming[0]

				pbx_call_same_disp = None
				if not pbx_incoming_call.disposition in CallsConstants.FAIL_TYPES:
					pbx_call_same_disp = filter(lambda x: x.disposition == pbx_incoming_call.disposition and not x.destination == CallsConstants.INCOMING, stat_pbx_group)[0]
				else:
					pbx_call_same_disp = filter(lambda x: not x.destination == CallsConstants.INCOMING, stat_pbx_group)
					pbx_call_same_disp = stat_pbx_group[0] if len(pbx_call_same_disp) == 0 else pbx_call_same_disp[0]

				call.set_params(
					call_id=pbx_call_same_disp.call_id,
					clid=pbx_call_same_disp.clid,
					sip=pbx_call_same_disp.sip,
					date=pbx_call_same_disp.date,
					destination=pbx_call_same_disp.destination,
					disposition=pbx_incoming_call.disposition,
					bill_seconds=pbx_incoming_call.seconds
				)

			else:
				pbx_call = stat_pbx_group[0]
				call.set_params(
					call_id=pbx_call.call_id,
					clid=pbx_call.clid,
					sip=pbx_call.sip,
					date=pbx_call.date,
					destination=pbx_call.destination,
					disposition=pbx_call.disposition,
					bill_seconds=pbx_call.seconds
				)

			if PBXDataService.is_number_known(call.clid, userprofile):
				# звонок исходящий либо внутренний

				if PBXDataService.is_number_known(call.destination, userprofile):
					# номер известный - звонок внутренний
					call.call_type = CallsConstants.INTERNAL
					if call.disposition in CallsConstants.FAIL_TYPES:
						call.destination = ''
					internal.append(call)
				else:
					# звонок исходящий
					call.call_type = CallsConstants.COMING
					if call.disposition in CallsConstants.FAIL_TYPES:
						call.destination = ''
					coming.append(call)
			else:
				# звонок входящий
				call.call_type = CallsConstants.INCOMING
				if call.disposition in CallsConstants.FAIL_TYPES:
					call.destination = ''
				incoming.append(call)

		return coming + incoming + internal