import { genId } from '../utils/id-generator'; import { Entity } from './entity'; import { ItemVenda } from './itemVenda'; import { Serializable } from '../interfaces/serializable'; import { Printable } from '../interfaces/printable'; export class Periodo { data_inicio: string; data_fim: string; constructor(json?: any) { this.data_inicio = json.data_inicio; this.data_fim = json.data_fim; } checarValidade(data: Date): boolean { return new Date(this.data_inicio).getTime() <= data.getTime() && data.getTime() <= new Date(this.data_fim).getTime() } } export class Ticket extends Entity implements Printable, Serializable { public codigo: string; public codigo_venda: string; public terminal: string; public descricao: string; public label: string; public extra_properties: any; public cortesia: boolean; public pacote: any; public preco: any; public produto: any; public _id_item: any; public data: string; public observacao: string; public template: string; public segunda_via: boolean; public periodo: Periodo; public usado: boolean public data_leitura: string public status: 'invalido' | 'valido' | 'utilizado' public motivo?: string public grupo: string; constructor(json, generateId?: boolean) { super(json, generateId); json = json || {}; let item = new ItemVenda(json.item); this.grupo = item.grupo this.codigo = json.codigo || genId(8); this.codigo_venda = json.codigo_venda; this.descricao = json.descricao || item.descricao; this.label = json.label || item.label; this.preco = json.preco || item.valor_unitario; this.usado = json.usado || false; this.cortesia = json.cortesia || item.cortesia; this.pacote = json.pacote; this._id_item = item._entry; this.produto = item._id_produto; this.terminal = json.terminal; this.data = json.data || new Date().toISOString(); this.observacao = json.observacao || item.observacao || ''; this.template = json.template || item.template || 'ticket'; this.segunda_via = json.segunda_via || false; const periodoJson = json.periodo || json.extra_properties && json.extra_properties.periodo; this.periodo = periodoJson && new Periodo(periodoJson); } public getTemplateName(): string { return this.template; } public getBody(): object { return this; } public toJson(): any { return this; } /** * Checagem da validade do ticket * * @param {Periodo} [periodoExterno] * @param {boolean} [checarDataAtual=false] * @returns {boolean} Verifica se o ticket contém um período válido de acordo com a data atual ou se este ticket contém uma data e se esta data junto com data atual estão contidas no período externo * @memberof Ticket */ public checarValidade(periodoExterno?: Periodo, checarDataAtual: boolean = false): boolean { const dataAtual = new Date() if (this.periodo) return this.periodo.checarValidade(dataAtual) else if (periodoExterno) return ( checarDataAtual ? periodoExterno.checarValidade(dataAtual) : true ) else return true; } }