import { ApiSession } from './api-session'; import { Terminal } from '../terminal'; import { Operador } from '../operador'; import { Entity } from '../entity'; import { SessionContext } from '../../utils/context'; import { TokenSet } from './tokenset'; import { UserInfo } from './user-info'; import { Empresa } from '../empresa'; import { RequesterUsuarioPublicSession } from './requester-usuario'; export class Session extends Entity { public api_url?: string; public mode?: 'online' | 'offline'; public status?: 'online' | 'offline'; public operadores?: Array; public apisession: ApiSession; public terminal?: Terminal; public operador?: Operador; public gruposPermitidos?: string[]; public tokenset: TokenSet; public userinfo: UserInfo; constructor(json, generateId?: boolean) { super(json, generateId); this._id = 'session'; json = json || {}; this.apisession = json.apisession as ApiSession; this.operadores = json.operadores && new Array(...json.operadores) || []; this.operador = json.operador && new Operador(json.operador); this.terminal = json.terminal && new Terminal(json.terminal); this.gruposPermitidos = json.gruposPermitidos; this.api_url = json.api_url; this.status = json.status || 'online'; this.mode = json.mode || 'online'; this.tokenset = json.tokenset && new TokenSet(json.tokenset); this.userinfo = json.userinfo && new UserInfo(json.tokenset); } public setConnected(status: 'online' | 'offline') { this.status = status; this._sync_local = false; return this; } public getEmpresa(): Empresa { return this.apisession && this.apisession.empresa; } public getTerminal(): Terminal { return this.terminal; } public getContext(): SessionContext { return this.apisession && this.apisession.context; } public getToken(): string { const operador: Operador = this.getOperador(); return operador && operador.token; } public setOperador(operador: Operador) { this.operador = operador; return this.update(); } public setMode(mode: 'online' | 'offline') { this.mode = mode; return this.update(); } public getMode(): 'online' | 'offline' { return this.mode; } public setOperadores(operadores: Array) { this.operadores = operadores; return this.update(); } public getOperador(): Operador { return this.operador; } public getOperadores(): Array { return this.operadores; } public getApiUrl() { return this.api_url; } public setApiUrl(api_url: string) { this.api_url = api_url; return this.update(); } public setTerminal(terminal: Terminal) { this.terminal = terminal; this._sync_local = false; return this.update(); } public getGruposPermitidos(): string[] { return this.gruposPermitidos; } public setGruposPermitidos(gruposPermitidos: string[]) { this.gruposPermitidos = gruposPermitidos; return this.update(); } public getUsuario(): RequesterUsuarioPublicSession { return Object.assign({}, this.getOperador(), this.apisession && this.apisession.usuario); } }