import * as chrono from 'chrono-node' import { TapiContact } from './tapi-contact' import { axios, extractNumber } from './utils' export class CallHistory { private callerIds: { [number: string]: TapiContact } = {} private updateCallHistoryEntry (call: HTMLElement, callerId: TapiContact) { if (callerId.tD_NAME !== '') { var span = call.querySelector('span') this.showTimeManager(call, span.nextSibling.textContent.trim(), callerId) var text = span.textContent span.textContent = callerId.tD_NAME var br = document.createElement('br') var span2 = document.createElement('span') span2.style.fontSize = 'small' span2.textContent = text span.parentNode.insertBefore(br, span.nextSibling) span.parentNode.insertBefore(span2, span.nextSibling) } } private showTimeManager (call: HTMLElement, date: string, callerId: TapiContact) { if (!callerId.tD_ID) { return } var dateParts = date.match(/^(?.*), (?[0-9]{2}:[0-9]{2}:[0-9]{2})$/) var duration = '00:00:00' if (dateParts) { date = dateParts.groups.date duration = dateParts.groups.duration } var parsedDate = chrono.de.parseDate(date) if (!parsedDate) { parsedDate = chrono.parseDate(date) } if (!parsedDate) { return } // Date parsing is awful, just assume the first number is the day of month var day = date.match(/[0-9]+/)[0] var parsedDuration = chrono.parseDate(duration) console.log('TAPI call history time:', date, 'parsedDate:', parsedDate, 'duration:', duration, 'parsedDuration:', parsedDuration) var connect = parsedDate.getFullYear().toString() + (parsedDate.getMonth() + 1).toString().padStart(2, '0') + // (January gives 0) day.toString().padStart(2, '0') + parsedDate.getHours().toString().padStart(2, '0') + parsedDate.getMinutes().toString().padStart(2, '0') var length = (parsedDuration.getHours() * 60 + parsedDuration.getMinutes()).toString() var toolbar = call.querySelector('.wcToolbarTiles') var href = 'domizil://PM/Zeitbuchung?KontaktId=' + callerId.tD_ID + '&connect=' + connect + '&length=' + length var a = document.createElement('a') a.title = 'PM Zeitbuchung' a.dataset.domizilLink = href a.onclick = () => { window.open(href) } a.innerHTML = '' + '' + ' ' + ' ' + ' ' + ' ' + '' + '' toolbar.insertBefore(a, toolbar.firstChild) } public async showCallHistory (element: HTMLElement) { var span = element.querySelector('span') var number = extractNumber(span.textContent) if (!number) { return } if (this.callerIds[number] !== undefined) { this.updateCallHistoryEntry(element, this.callerIds[number]) } else { var response = await axios.get('http://cpatapi.cpsrvweb2016.cp-austria.at/callerid/' + encodeURIComponent(number)) var callerId: TapiContact = { tD_NAME: '' } if (response.status === 200) { callerId = response.data } console.log('TAPI call histroy callerid response', number, response, callerId) this.callerIds[number] = callerId this.updateCallHistoryEntry(element, callerId) } } }