import { Entity } from './entity'; import { Total } from './total'; import { Cliente } from './cliente'; import { Pessoa } from './pessoa'; import { ItemPedido } from './itemPedido'; import { Pagamento } from './pagamento'; import { Entrega } from './entrega'; import { Nota } from './nota'; import { Produto } from './produto'; import { Operador } from './operador'; export enum Status { iniciando = 'iniciando', fechado = 'fechado', aberto = 'aberto', produzindo = 'produzindo', pronto = 'pronto', despachado = 'despachado', entregue = 'entregue', rejeitado = 'rejeitado' } export class Historico { data: string; status: Status; } export class Solicitacao { acao: string; concluido: boolean; data_solicitacao: string; data_execucao?: string; texto?: string; solicitante?: Operador; } export class Pedido extends Nota { public itens: Array; observacao: string; status: string; historico: Array; data_abertura: string; pagamentos: Array = []; entrega: Entrega = new Entrega(); solicitacoes: Array = []; numero: string; identificador: string; extra_properties: any; bloqueado: boolean; motivo_bloqueio: string; pre_pago: boolean; constructor(json?:any, generateId?: boolean) { super(json, generateId); json = json || {}; this.numero = json.numero || this.numero_entrega; this.observacao = json.observacao; this.status = json.status || Status.aberto; this.data_abertura = json.data_abertura || new Date().toISOString(); this.pessoa = json.pessoa ? new Cliente(json.pessoa) : undefined; this.pagamentos = json.pagamentos && new Array(...json.pagamentos) || []; this.itens = json.itens && new Array(...json.itens) || []; this.entrega = new Entrega(json.entrega); this.identificador = json.identificador; this.bloqueado = json.bloqueado || false; this.motivo_bloqueio = json.motivo_bloqueio || ''; this.pre_pago = json.pre_pago || false; this.historico = json.historico && new Array(...json.historico) || [ { data: new Date().toISOString(), status: Status.iniciando } ]; this.solicitacoes = json.solicitacoes && new Array(...json.solicitacoes) || []; } protected createItem(json?: any): ItemPedido { return new ItemPedido(json); } public addItem(produto: Produto, quantidade?: number, operador?: Operador): Array { if(this.itens.length === 0) { this.historico.push({ data: new Date().toISOString(), status: Status.aberto }) } return super.addItem(produto, quantidade, operador) as Array; } setPagamentos(pagamentos: Array) { this.pagamentos = []; super.setPagamentos(pagamentos); this.pagamentos = this.venda.pagamentos; } public saldo(){ return this.valorPago() - this.total.vnf; } public async fechar(): Promise { return super.fechar() .then(() => { this.historico.push({ 'data': new Date().toISOString(), 'status': Status.fechado }); this.status = Status.fechado; }).then(() => Promise.resolve()); } public itensAgrupados(): Array { let itensAgrupados: Array = []; this.itens.forEach(item => { let itemAgrupado = itensAgrupados.find(i => i._id === item._id && i._id_combo === item._id_combo); if (itemAgrupado) { itemAgrupado.quantidade += item.quantidade; itemAgrupado.valor_total += item.valor_total; itemAgrupado.valor_final += item.valor_final; } else { itensAgrupados.push(item); } }); return itensAgrupados; } }