import { Composto } from './composto'; import { Unidade } from './unidade'; import { Imagem } from './imagem'; import Imposto from './imposto/imposto'; import { Entity } from './entity'; import { Fornecedor } from './fornecedor'; import { Dispositivo, TipoDispositivo } from './dispositivo'; import { stringFormatter } from '../utils/formatter-string-values' import { IngredienteAdicionalProduto } from './ingredientesAdicionais'; export class Grupo extends Entity { public nome: string; public parent: string; public impressora: string; public observacoes?: Array constructor(json?: any, generateId: boolean = false) { super(json, generateId); json = json || {}; this.nome = stringFormatter(json.nome, true) || ''; this.parent = json.parent || ''; this.impressora = json.impressora; this.observacoes = json.observacoes || new Array(); } } export type FornecedorProduto = Partial & { codigo_produto: string } export declare class ValorCombo { _id: string nome: string } export class Combo { quantidade: number; filtro: 'produto' | 'grupo' values: Array = new Array() constructor(json?: any) { json = json || {} this.quantidade = json.quantidade || 1 this.filtro = json.filtro this.values = json && json.values && new Array(...json.values) || new Array() } } export class Produto extends Entity { public descricao: string; public label: string; public preco: number; public prc_tx_servico; public imagem: Imagem; public composicoes: Array; public composicao_ativa: boolean; public incluir_composicao_nota: boolean; public grupo?: string | Grupo; public observacao: string; public template: string; public extra_properties: any; public cortesia: boolean; public ncm: string; public ean: string; public cfop: string; public cest: string; public cbenef: string; public imposto: any; public estoque: Array; public codigo: string; public unidade_venda: any; public compoe_total: boolean; public ticket_unitario: boolean; public custo: number; public ativo: boolean; public fornecedores: Array; public baixa_estoque: boolean; public dispositivos: Array public combos: Array public ingrediente_adicional_ativo: boolean public ingrediente_adicional_obrigatorio: boolean public ingredientes_adicionais: Array public ultimo_custo: any public origem: string constructor(json?: any, generateId?: boolean) { super(json, generateId); json = json || {}; this.descricao = json.descricao; this.dispositivos = json.dispositivos || [] this.ultimo_custo = json.ultimo_custo || '' this.label = json.label || this.dispositivos[0] && this.dispositivos[0].descricao || this.descricao; this.imagem = json.imagem || this.dispositivos[0] && this.dispositivos[0].img as Imagem; this.combos = json && json.combos && new Array(...json.combos) || new Array(); this.ingrediente_adicional_ativo = json.ingrediente_adicional_ativo === true; this.ingrediente_adicional_obrigatorio = json.ingrediente_adicional_obrigatorio === true; this.ingredientes_adicionais = json && json.ingredientes_adicionais && new Array(...json.ingredientes_adicionais) || new Array(); this.grupo = json.grupo && typeof json.grupo === 'string' ? json.grupo : new Grupo(json.grupo); this.observacao = json.observacao; this.template = this.extra_properties && this.extra_properties.template || 'ticket'; this.cortesia = this.extra_properties ? !!this.extra_properties.cortesia : false; this.composicao_ativa = json.composicao_ativa; this.baixa_estoque = json && json.baixa_estoque || true; this.ean = json.ean; this.ncm = json.ncm; this.composicoes = json.composicoes && json.composicoes.map(({produto, quantidade, descricao, custo}) => new Composto(produto, quantidade, descricao, custo)) || new Array(); this.cest = json.cest; this.cfop = json.cfop; this.cbenef = json.cbenef; this.imposto = json.imposto && new Imposto(json.imposto); this.estoque = json.estoque; this.codigo = json.codigo; this.origem = json.origem; this.unidade_venda = json.unidade_venda; this.prc_tx_servico = json.prc_tx_servico; if (this.cortesia) { this.preco = 0; } else { this.preco = json.preco; } this.compoe_total = json.compoe_total === false ? false : true; this.ticket_unitario = json.ticket_unitario == false ? false : true; this.ativo = json.ativo == false ? false : true; this.custo = json.custo || 0.0; this.fornecedores = json && json.fornecedores && new Array(...json.fornecedores) || new Array(); } public dispositivo(tipo: TipoDispositivo): Dispositivo { return this.dispositivos.find(elm => elm.tipo === tipo) } public addComposto(quantidade: number, produto: Produto) { if (!this.composicoes) this.composicoes = []; const composto = new Composto(produto, quantidade, produto.label || produto.descricao, produto.custo); this.composicoes.push(composto); } }