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; i < list.length; i++) { var p = list[i]; p._busca = ( prd && (p.prd==prd) ) ? '_ean2' : ( p.prd_nfeean && (p.prd_nfeean.indexOf(ean)==0) ) ? 'prd_nfeean' : ( p.prd_codigo && (p.prd_codigo==prd) ) ? 'prd_codigo' : null; if (p._busca) { if (p.prd_codigo==prd) { result.unshift(p); } else { result.push(p); } } if (p.prd_codigo=='101') { console.error('ean:', ean, 'n:', prd, 'cod:', p.prd_codigo, p.prd_desc, p.prd, p._busca, result); } } if (result.length>0) { 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 < list.length; i++) { var p = list[i]; p._busca = ( prd && (p.prd==prd) ) ? '_ean2' : ( p.prd_nfeean && (p.prd_nfeean.indexOf(ean)==0) ) ? 'prd_nfeean' : ( p.prd_codigo && (p.prd_codigo==prd) ) ? 'prd_codigo' : (this.descMatch(p,ean)) ? 'prd_desc' : null ; if (p._busca) { if (p.prd_codigo==prd) { result.unshift(p); } else { if (result.length>=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 < ll.length; i++) { var l = ll[i].trim(); if (l=='') { continue; } if (l.indexOf('-')!=0) { ll2 += ( (ll2=='') ? '' : ',') + l ; continue; } l = l.substring(1); if ( (localizacao!='') && (localizacao.indexOf(l.toLowerCase())==0) ) { //console.error('localizacaoNOK1', localizacao, l, p ); return false; } /* if ( (mesadesc!='') && (mesadesc.indexOf(l.toLowerCase())==0) ) { //console.error('localizacaoNOK2', mesadesc, l, p ); return false; } */ // TODO: regex } if (ll2=='') { //console.error('localizacaoOK0', ll, mesadesc, localizacao, p ); return true; } var ll = ll2.split(','); for (var i=0; i < ll.length; i++) { var l = ll[i].trim(); if (l=='') { continue; } if ( (localizacao!='') && (localizacao.indexOf(l.toLowerCase())==0) ) { //console.error('localizacaoOK1', localizacao, l, p ); return true; } /* if ( (mesadesc!='') && (mesadesc.indexOf(l.toLowerCase())==0) ) { //console.error('localizacaoOK2', mesadesc, l, p ); return true; } */ // TODO: regex } //console.error('localizacaoNOK9', 'll2:', ll2, localizacao, mesadesc, ll, p ); return false; } } function Entidades() { this.expire = 1000 * 60 * 10; // 10 minutos this.prd = null; this.grp = null; this.frn = null; this.fpr = null; this.loc = null; this.prds = null; this.grps = null; this.frns = null; this.fprs = null; this.loadPrdGrpFrnFprLoc = function (onOK, onNOK) { if ( (this.hora) && (this.prd) && (this.grp) && (this.frn) && (this.fpr) && (this.loc)) { var timeDiff = Math.abs((new Date()).getTime() - this.hora.getTime()); console.log('loadPrdGrpFrnFprLoc','timeDiff=',timeDiff); if (timeDiff < this.expire) { if (onOK) { onOK( false ); } return; } } var url = http.getUrl('contahub.cmds.ProducaoCmd', 'getPrdGrpFrnFprLoc') ; http.callHTTP( url ,function(dados) { console.log('getPrdGrpFrnFprLoc',dados,onOK); entidades.prd = dados['_contahub.entities.Produto']; entidades.grp = dados['_contahub.entities.GrupoProduto']; entidades.frn = dados['_contahub.entities.Fornecedor']; entidades.fpr = dados['_contahub.entities.FornecedorProduto']; entidades.loc = dados['_contahub.entities.Local']; entidades.prd.hora = new Date(); entidades.grp.hora = new Date(); entidades.frn.hora = new Date(); entidades.fpr.hora = new Date(); entidades.loc.hora = new Date(); entidades.frns = new Object(); for (var i=0; i < entidades.frn.list.length; i++) { var key = 'f' + entidades.frn.list[i].frn; entidades.frns[ key ] = entidades.frn.list[i]; } entidades.fprs = new Object(); for (var i=0; i < entidades.fpr.list.length; i++) { var key = 'fp' + entidades.fpr.list[i].frn + '-' + entidades.fpr.list[i].fpr; entidades.fprs[ key ] = entidades.fpr.list[i]; } entidades.prds = new Object(); for (var i=0; i < entidades.prd.list.length; i++) { var key = 'p' + entidades.prd.list[i].prd; entidades.prds[ key ] = entidades.prd.list[i]; } if (onOK) { onOK( true ); } } , function(msg) { if (onNOK) { onNOK(msg); } else { console.error(msg); } } ); } this.loadPrdGrp = function (onOK, onNOK) { if ( (this.hora) && (this.prd) && (this.grp) ) { var timeDiff = Math.abs((new Date()).getTime() - this.hora.getTime()); console.log('loadPrdGrp','timeDiff=',timeDiff); if (timeDiff < this.expire) { if (onOK) { onOK( false ); } return; } } var url = http.getUrl('contahub.cmds.ProducaoCmd', 'getPrdGrp') ; http.callHTTP( url ,function(dados) { console.log('getPrdGrpFrnFprLoc',dados,onOK); entidades.prd = dados['_contahub.entities.Produto']; entidades.grp = dados['_contahub.entities.GrupoProduto']; entidades.prd.hora = new Date(); entidades.grp.hora = new Date(); entidades.prds = new Object(); for (var i=0; i < entidades.prd.list.length; i++) { var key = 'p' + entidades.prd.list[i].prd; entidades.prds[ key ] = entidades.prd.list[i]; } if (onOK) { onOK( true ); } } , function(msg) { if (onNOK) { onNOK(msg); } else { console.error(msg); } } ); } this.loadGrp = function (onOK, onNOK) { if ( (this.hora) && (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', 'getGrp') ; http.callHTTP( url ,function(dados) { entidades.grp = dados['_contahub.entities.GrupoProduto']; entidades.grp.hora = new Date(); entidades.grps = new Object(); for (var i=0; i < entidades.grp.list.length; i++) { var key = 'g' + entidades.grp.list[i].grp; entidades.grps[ key ] = entidades.grp.list[i]; } if (onOK) { onOK( true ); } } , function(msg) { if (onNOK) { onNOK(msg); } else { console.error(msg); } } ); } this.getPrd = function (prd) { prd = ('' + prd).trim(); var result = entidades.prds[ 'p' + prd]; return result; } this.getGrp = function (grp) { grp = ('' + grp).trim(); var result = entidades.grps[ 'g' + grp]; return result; } this.getFrn = function (frn) { return entidades.frns[ 'f' + frn]; } this.getFpr = function (fpr) { return entidades.fprs[ 'fp' + fpr]; } this.fprUnid = function (fp, p) { var pUnid = p.prd_unid; if (pUnid) { pUnid = pUnid.toLowerCase(); } else { pUnid = ''; } var fpUnid = fp.fpr_unid; if (fpUnid) { fpUnid = fpUnid.toLowerCase(); } else { fpUnid = ''; } if ( (fp.fpr_conversao==1) && (pUnid==fpUnid) ) { return p.prd_unid; } return fp.fpr_unid + "=" + fp.fpr_conversao + p.prd_unid; } this.getDataAdapterPrdFpr = function () { var result = new Array(); for (var i=0; i < this.prd.list.length; i++) { var p = this.prd.list[i]; var o = new Object(); var sGrp = ''; // p.grp_desc ? (' ' + p.grp_desc) : ''; o['prd'] = '' + p.prd; o['prd_desc'] = p.prd_desc + ' [' + p.prd_unid + ']' + sGrp; result.push(o); } for (var i=0; i < this.fpr.list.length; i++) { var o = new Object(); var fp = this.fpr.list[i]; var f = entidades.getFrn(fp.frn); var s = ''; if (f) { s = " (" + f.frn_alias + ")"; } var p = entidades.getPrd(fp.prd); if (p) { s += " [" + entidades.fprUnid(fp, p) + "]"; } o['prd'] = '' + fp.prd + ':' + fp.frn + '-' + fp.fpr; o['prd_desc'] = fp.fpr_desc + s; result.push(o); } var source = { localdata: result, datatype: "array", datafields: [ { name: 'prd', type: 'string' },{ name: 'prd_desc', type: 'string' }], autoBind: true }; var dataAdapter = new $.jqx.dataAdapter(source); return dataAdapter; } this.getDataAdapterPrdOuGrp = function () { var result = new Array(); for (var i=0; i < this.prd.list.length; i++) { var p = this.prd.list[i]; var o = new Object(); var sGrp = ''; // p.grp_desc ? (' ' + p.grp_desc) : ''; o['prd'] = '' + p.prd; o['prd_desc'] = p.prd_desc + ' [' + p.prd_unid + ']' + sGrp; result.push(o); } for (var i=0; i < this.grp.list.length; i++) { var o = new Object(); var g = this.grp.list[i]; var s = g.grp_desc + '[grupo]'; o['prd'] = 'g' + g.grp; o['prd_desc'] = s; result.push(o); } var source = { localdata: result, datatype: "array", datafields: [ { name: 'prd', type: 'string' },{ name: 'prd_desc', type: 'string' }], autoBind: true }; var dataAdapter = new $.jqx.dataAdapter(source); return dataAdapter; } this.getDataAdapterPrd = function () { var result = new Array(); for (var i=0; i < this.prd.list.length; i++) { var o = new Object(); o['prd'] = '' + this.prd.list[i].prd; var desc = this.prd.list[i].prd_desc + ' [' + this.prd.list[i].prd_unid + ']'; if (this.prd.list[i].prd_ativo!='S') { desc += '(Inativo)'; } desc += ' #' + this.prd.list[i].prd; o['prd_desc'] = desc; result.push(o); } var source = { localdata: result, datatype: "array", datafields: [ { name: 'prd', type: 'string' },{ name: 'prd_desc', type: 'string' }], autoBind: true }; var dataAdapter = new $.jqx.dataAdapter(source); return dataAdapter; } }