var entidades = new Entidades(); var produtosParaVenda = new ProdutosParaVenda(); function ProdutosParaVenda() { this.tipoCodigoBarras = 'A'; this.expire = 1000 * 60 * 10; // 10 minutos this.hora = null; this.prd = null; this.grp = null; this.fpg = null; this.prds = null; this.grps = null; this.fpgs = null; this.loadPrdGrpParaVenda = function (onOK, onNOK) { if ( (this.hora) && (this.prd) && (this.grp) ) { var timeDiff = Math.abs((new Date()).getTime() - this.hora.getTime()); if (timeDiff < this.expire) { if (onOK) { onOK( false ); } return; } } var url = http.getUrl('contahub.cmds.ProdutoCmd', 'getPrdGrpParaVenda') ; http.callHTTP( url ,function(dados) { produtosParaVenda.prd = dados['_contahub.entities.Produto']; produtosParaVenda.grp = dados['_contahub.entities.GrupoProduto']; produtosParaVenda.hora = new Date(); produtosParaVenda.prd.hora = new Date(); produtosParaVenda.grp.hora = new Date(); produtosParaVenda.prds = new Object(); for (var i=0; i < produtosParaVenda.prd.list.length; i++) { var p = produtosParaVenda.prd.list[i]; p.semAcento = p.prd_desc ? util.semAcentos(p.prd_desc).toLowerCase() : ''; var key = 'p' + p.prd; produtosParaVenda.prds[ key ] = p; } console.log('getPrdGrpParaVenda',dados, produtosParaVenda); if (onOK) { onOK( true ); } } , function(msg) { if (onNOK) { onNOK(msg); } else { console.error(msg); } } ); } this.loadPrdGrpFpgParaVenda = function (onOK, onNOK) { if ( (this.hora) && (this.prd) && (this.grp) && (this.fpg) ) { var timeDiff = Math.abs((new Date()).getTime() - this.hora.getTime()); if (timeDiff < this.expire) { if (onOK) { onOK( false ); } return; } } var url = http.getUrl('contahub.cmds.ProdutoCmd', 'getPrdGrpFpgParaVenda') ; http.callHTTP( url ,function(dados) { produtosParaVenda.prd = dados['_contahub.entities.Produto']; produtosParaVenda.grp = dados['_contahub.entities.GrupoProduto']; produtosParaVenda.fpg = dados['_contahub.entities.FormaPagamento']; produtosParaVenda.hora = new Date(); produtosParaVenda.prd.hora = new Date(); produtosParaVenda.grp.hora = new Date(); produtosParaVenda.fpg.hora = new Date(); produtosParaVenda.prds = {}; for (var i=0; i < produtosParaVenda.prd.list.length; i++) { var p = produtosParaVenda.prd.list[i]; p.semAcento = p.prd_desc ? util.semAcentos(p.prd_desc).toLowerCase() : ''; var key = 'p' + p.prd; produtosParaVenda.prds[ key ] = p; } produtosParaVenda.fpgs = {}; for (var i=0; i < produtosParaVenda.fpg.list.length; i++) { var f = produtosParaVenda.fpg.list[i]; f.semAcento = f.fpg_desc ? util.semAcentos(f.fpg_desc).toLowerCase() : ''; var key = 'f' + f.fpg; produtosParaVenda.fpgs[ key ] = f; } console.log('getPrdGrpParaVenda',dados, produtosParaVenda); if (onOK) { onOK( true ); } } , function(msg) { if (onNOK) { onNOK(msg); } else { console.error(msg); } } ); } this.getPrd = function (prd) { prd = ('' + prd).trim(); var result = produtosParaVenda.prds[ 'p' + prd]; return result; } this.getFpg = function (fpg) { fpg = ('' + fpg).trim(); var result = produtosParaVenda.fpgs[ 'f' + fpg]; return result; } this.getPrdDeEAN2 = function(ean) { var prd = 0; if ( (ean.indexOf('2')==0) && (ean.length==13) ) { if ( (this.tipoCodigoBarras=='A') || (this.tipoCodigoBarras=='C') || (this.tipoCodigoBarras=='D') ) { prd = 1 * ean.substring(1,7); } else { prd = 1 * ean.substring(1,6); } } return prd; } this.getQtdOuValorDeEAN2 = function(ean) { var qtd = 0; if ( (ean.indexOf('2')==0) && (ean.length==13) ) { if (this.tipoCodigoBarras=='A') { qtd = 1 * ean.substring(7,11); var decimais = 1 * ean.substring(11,12); qtd = util.arred4( qtd / Math.pow(10,decimais) ); console.error('*** qtd/valor:',qtd, ean, decimais, this.tipoCodigoBarras); } else if (this.tipoCodigoBarras=='C') { qtd = 1 * ean.substring(7,12); var decimais = 3; qtd = util.arred4( qtd / Math.pow(10,decimais) ); console.error('*** qtd/valor:',qtd, ean, decimais, this.tipoCodigoBarras); } else if (this.tipoCodigoBarras=='B') { qtd = 1 * ean.substring(6,12); qtd = util.arred4( qtd / 100 ); console.error('*** qtd/valor:',qtd, ean, this.tipoCodigoBarras); } else if (this.tipoCodigoBarras=='D') { qtd = 1 * ean.substring(7,12); qtd = util.arred4( qtd / 100 ); console.error('*** qtd/valor:',qtd, ean, this.tipoCodigoBarras); } } return qtd; } this.getProdutoPeloEanOuCodigo = function (ean) { var prd = produtosParaVenda.getPrdDeEAN2(ean); if ( (prd==0) && (1*ean) ) { prd = 1 * ean; console.error('prd',prd); } var list = produtosParaVenda.prd.list; var result = []; for (var i=0; i0) { return result[0]; } return null; } this.getProdutosPeloEanOuCodigoOuDesc = function (ean, maximo) { var prd = produtosParaVenda.getPrdDeEAN2(ean); if ( (prd==0) && (1*ean) ) { prd = 1 * ean; console.error('prd',prd); } maximo = maximo ? maximo : 10; var result = []; if (ean.length>0) { var list = produtosParaVenda.prd.list; for (var i=0; i=maximo) { continue; } result.push(p); } } } } return result; } this.getProdutosPelaDesc = function(desc, maximo) { var result = []; var list = produtosParaVenda.prd.list; if ((desc.length==0) && (maximo==0) ) { result = list; } else if (desc.length==0) { for (var i=0; (i < list.length) && (i < maximo); i++) { var p = list[i]; result.push(p); } } else { for (var i=0; i < list.length; i++) { var p = list[i]; var prdDesc = p.semAcento; var ss = util.semAcentos(desc.toLowerCase()).split(' '); p._ranking = 0; for (var j=0; j < ss.length; j++) { if (prdDesc.indexOf(ss[j])==0) { p._ranking += (j==0) ? 100 : 50; } else if (prdDesc.indexOf(' ' + ss[j])!=-1) { p._ranking += 10; } else if (prdDesc.indexOf(ss[j])!=-1) { p._ranking += 1; } } if (p._ranking) { result.push(p); } } result.sort( function(p1,p2) { return p2._ranking-p1._ranking; }); if ((maximo>0) && (result.length > maximo)) { result.length = maximo; } } return result; } this.descMatch = function(p, subS) { var s = p.semAcento; subS = util.semAcentos(subS).toLowerCase() var ss = subS.split(' '); var peloMenosUm = false; for (var i=0; i < ss.length; i++) { if (s.indexOf(ss[i])==-1) { return false; } else { peloMenosUm = true; } } return peloMenosUm; } this.getGrp = function (grp) { grp = ('' + grp).trim(); var result = produtosParaVenda.grps[ 'g' + grp]; return result; } this.localizacaoOK = function(v, p) { var l = p.prd_localizacao; if (!l) { return true; } // console.log('localizacaoOK', l, v, p); if (!v) { return false; } var localizacao = v.vd_localizacao ? v.vd_localizacao.toLowerCase() : ''; var mesadesc = v.vd_mesadesc.toLowerCase(); var ll = l.split(' '); var ll2 = ''; for (var i=0; i