import { ItemVenda } from "../domain/itemVenda"; import { Produto } from "../domain/produto"; import { Ticket } from "../domain/ticket"; import { get } from 'lodash'; import { Composto } from "../domain/composto"; import { Nota } from "../domain/nota"; export const generateTicket = (nota: Nota, item: ItemVenda, quantidade: number, extra_properties?, pacote?: boolean): Array => new Array(quantidade) .fill(null) .map(i => new Ticket({ _id_cliente: item._id_cliente, _id_empresa: item._id_empresa, codigo_venda: nota.codigo, terminal: get(nota, 'venda.caixa.terminal.nome'), item, pacote, data: new Date(nota.data_emissao).toISOString(), extra_properties }) ); export const calculaTicketsPorCompostos = (nota: Nota, compostos: Array = [], quantidadeItem: number, extra_properties?) => compostos.map((composto) => generateTicket( nota, new ItemVenda({ _entry: composto.item && composto.item._entry, produto: composto.produto, quantidade: 1, crtEmpresa: nota.crtEmpresa }), composto.quantidade * quantidadeItem, Object.assign({}, extra_properties, composto.produto.extra_properties), true ) ); export const adicionarTicketPorItem = (nota: Nota, itemPrincipal: ItemVenda, quantidade: number, produto: Produto, extra_properties?, itensComposicao?: Array): Array => { const ticketsItem = !( produto.composicao_ativa && produto.ticket_unitario ) && !produto.incluir_composicao_nota && generateTicket(nota, itemPrincipal, quantidade, Object.assign({}, produto.extra_properties, extra_properties || {})) || []; const ticketsComposto = ( produto.composicao_ativa && produto.ticket_unitario ) && calculaTicketsPorCompostos(nota, produto.composicoes.map(composto => Object.assign({}, composto, { item: !produto.incluir_composicao_nota && itemPrincipal || itensComposicao && itensComposicao.find(item => item._id_produto === composto.produto._id) }) ) , quantidade, extra_properties) || []; return [].concat(ticketsItem, ticketsComposto).flat(); }