var dadosCC = new DadosCC(); function DadosCC() { this.list = null; this.meta = [ { name: 'cc', type: 'int' }, { name: 'cc_codigo', type: 'string' }, { name: 'cc_desc', type: 'string' }, { name: 'ccx', type: 'string' }, ]; this.dataAdapter = null; this.currentGridId = null; this.colunas = null; this.key = 'cc'; this.onAddCCFunction = null; this.allowAdd = true; this.tooltipOff = false; this.editorHeight = 0; this.newCC = function(cc) { console.log('newCC', dadosCC.list); dadosCC.list.push(cc); dadosCC.createDataAdapter(); } this.createDataAdapter = function() { var source = { localdata: dadosCC.list, datatype: "array", datafields: dadosCC.meta, autoBind: true }; dadosCC.dataAdapter = new $.jqx.dataAdapter(source); } this.clear = function() { dadosCC.list = null; dadosCC.dataAdapter = null; dadosCC.currentGridId = null; dadosCC.colunas = null; dadosCC.key = 'cc'; dadosCC.onAddCCFunction = null; dadosCC.allowAdd = null; dadosCC.tooltipOff = false; dadosCC.editorHeight = 0; } this.update = function(f) { dadosCC.clear(); var url = http.getUrl('contahub.cmds.fin.FinanceiroCmd', 'getCCs') + '?emp=' + index.emp ; http.callHTTP( url, function(dados) { console.log('getCCsOK', dados); dadosCC.list = dados.list; for (var i=0; i < dadosCC.list.length; i++) { dadosCC.list[i].ccx = dadosCC.list[i].cc_codigo + ' → ' + dadosCC.list[i].cc_desc; } dadosCC.createDataAdapter(); if (f) { f(); } }, http.alert ); } this.getDescFromCC = function(cc) { var list = dadosCC.list; if (!list) { return null; } for (var i=0; i < list.length; i++) { if (cc == list[i].cc) { return list[i].cc_desc; } } return null; } this.getDadosFromCC = function(cc) { var list = dadosCC.list; if (!list) { return null; } for (var i=0; i < list.length; i++) { if (cc == list[i].cc) { return list[i]; } } return null; } this.getCodigoFromCC = function(cc) { var list = dadosCC.list; if (!list) { return null; } for (var i=0; i < list.length; i++) { if (cc == list[i].cc) { return list[i].cc_codigo; } } return null; } this.getDescFromCodigo = function(codigo) { var list = dadosCC.list; for (var i=0; i < list.length; i++) { if (codigo.toLowerCase() == list[i].cc_codigo.toLowerCase()) { return list[i].cc_desc; } } return null; } this.getCCFromCodigo = function(codigo) { var list = dadosCC.list; for (var i=0; i < list.length; i++) { if (codigo && codigo.toLowerCase && (codigo.toLowerCase() == list[i].cc_codigo.toLowerCase())) { return list[i].cc; } } return null; } this.getHierarchy = function(codigo) { var list = this.list; var result = new Array(); if (codigo) { var i = 0; for (var i=0; i < list.length; i++) { var c = list[i]; if ( (codigo.toLowerCase() == c.cc_codigo.toLowerCase()) || (codigo.toLowerCase().indexOf(c.cc_codigo.toLowerCase() +'.')==0) ) { result.push(c); } } } return result; } this.getHierarchyTable = function(codigo, datafield, row) { if (! codigo) { return ''; } // codigo = codigo.trim(); if (codigo=='') { return ''; } var ccs = this.getHierarchy(codigo); var s = '' var achou = false; var existentes = ''; for (var i=0; i < ccs.length; i++) { existentes += ' ' + ccs[i].cc_codigo + ' '; var bold = (i==ccs.length-1) ? '' : ''; s += '' + '' + '' ; if (codigo.toLowerCase()==ccs[i].cc_codigo.toLowerCase()) { achou = true; } } if (!achou) { var ss = ''; while (codigo.length>0) { var bold = ''; var botao = ''; if ( (dadosCC.allowAdd) && (codigo.indexOf('.')!=-1) ) { botao = ' '; } ss = '' + ss; if (codigo.indexOf('.')==-1) { break; } codigo = codigo.substring(0, codigo.lastIndexOf('.')); if (existentes.indexOf(' ' + codigo + ' ')!=-1) { break; } } s += ss; } s += '
' + bold + ccs[i].cc_codigo + '' + util.repl(' ', ccs[i].cc_codigo.length) + bold + ccs[i].cc_desc + '  
' + bold + codigo + '' + util.repl(' ', codigo.length) + bold + 'CC Inexistente' + botao + '
' return s; } this.addCCInexistente = function(codigo, datafield, row) { while (codigo.endsWith('.')) { codigo = codigo.substring(0, codigo.length-1); } if (codigo=='') { window.alert('Código inválido'); return; } var pai = codigo.substring(0, codigo.lastIndexOf('.')); var paiCC = dadosCC.getCCFromCodigo( pai ); if (! (paiCC)) { window.alert('Centro de Custo superior inexistente: ' + pai); return; } var desc = codigo.substring(codigo.lastIndexOf('.')+1); var desc = window.prompt('Descriçao para o Centro de Custo [' + codigo + ']', desc); if ( (desc) && (desc.trim()!=null) ) { console.log( 'addCCInexistente' , codigo, desc ); var formData = [ { "id": "cc_codigo", "value": codigo }, { "id": "cc_desc", "value": desc }, ]; var url = http.getUrl('contahub.cmds.fin.FinanceiroCmd', 'addCC') + '?emp=' + index.emp ; http.callHTTP( url, function(dados) { console.log('addCCOK', row, dados); dados.ccx = dados.cc_codigo + ' → ' + dados.cc_desc; dadosCC.list.push( dados ); dadosCC.createDataAdapter(); if (dadosCC.onAddCCFunction) { dadosCC.onAddCCFunction( dados, datafield, row ); } }, http.alert, formData ); } } this.extrato = function(codigo, event) { var url = window.location.href; var d0 = util.getHashParameter('d0'); if (d0!='') { d0 = '#d0=' + d0; } var d1 = util.getHashParameter('d1'); if (d1!='') { d1 = '#d1=' + d1; } if (url.indexOf('#')>0) { url = url.substring(0, url.indexOf('#') ); } url = '#financeiro.extrato' + d0 + d1 + '#cc_codigo=' + codigo; console.log('extrato', url, codigo, d0, d1, event.ctrlKey); if ( (event.ctrlKey) || (event.shiftKey) || (event.altKey) ) { window.location = url; } else { window.open(url); } } this.setGridId = function( gridId) { tooltipOff = false; dadosCC.currentGridId = gridId; $('#' + dadosCC.currentGridId).jqxTooltip(); return dadosCC; } this.setColunas = function(colunas) { dadosCC.colunas = '|' + colunas + '|'; return dadosCC; } this.setKey = function(key) { dadosCC.key = key; return dadosCC; } this.allowAddCC = function( f ) { dadosCC.allowAdd = true; dadosCC.onAddCCFunction = f; return dadosCC; } this.disallowAddCC = function( ) { dadosCC.allowAdd = false; dadosCC.onAddCCFunction = null; return dadosCC; } this.tooltip = function (element, pageX, pageY) { if (dadosCC.tooltipOff) { return; } var cell = $('#' + dadosCC.currentGridId ).jqxGrid('getcellatposition', pageX, pageY); var coluna = cell.column; // console.log('tooltip', coluna, dadosCC.colunas); if (dadosCC.colunas.indexOf('|' + coluna + '|')!=-1) { var cc = cell.value; if (dadosCC.codigoInexistente) { cc = dadosCC.codigoInexistente; } if (cc) { var codigo = cc; if ( (dadosCC.key=='cc_codigo') || (dadosCC.codigoInexistente) ) // key { cc = dadosCC.getCCFromCodigo(codigo); } else { codigo = dadosCC.getCodigoFromCC(cc); } var s = dadosCC.getHierarchyTable(codigo, coluna, cell.row); $('#' + dadosCC.currentGridId).jqxTooltip({ content: s, autoHide: true, closeOnClick: true, theme: 'orange' }); $('#' + dadosCC.currentGridId).jqxTooltip('open', pageX + 10, pageY + 0); return; } } $('#' + dadosCC.currentGridId).jqxTooltip('close'); } this.createEditorCC = function (row, cellvalue, editor, cellText, width, height) { console.log('createEditorCC', row, cellvalue, editor, width, height); dadosCC.editorHeight = height; } this.initEditorCC = function (row, cellvalue, editor, celltext, pressedkey) { // console.log('initEditorCC', row, cellvalue, editor, celltext, pressedkey); var inputField = $("").prependTo(editor); inputField.jqxInput( {placeHolder: "Centro de Custo" , source: dadosCC.dataAdapter , searchMode: "containsignorecase" , displayMember: "ccx" , valueMember: dadosCC.key , minLength:1 , width: 350 , height: dadosCC.editorHeight , theme:'orange' , filter: input.filterContainsAllTokens , sort: input.noSort , highlight: input.highlightTokens }); $('#' + dadosCC.currentGridId).jqxTooltip('close'); dadosCC.tooltipOff = true; if (pressedkey) { inputField.val(pressedkey); inputField.jqxInput('selectLast'); } else { if (cellvalue) { inputField.val(cellvalue); } else { inputField.val(''); } inputField.jqxInput('selectAll'); } $('#' + dadosCC.currentGridId).jqxTooltip('close'); dadosCC.tooltipOff = true; } this.getEditorValueCC = function (row, cellvalue, editor) { dadosCC.tooltipOff = false; var inputField = editor.find('input'); var x = inputField.val(); inputField.jqxInput('destroy'); console.log('getEditorValueCC', x, row, cellvalue, editor); return x; } this.renderCC = function (row, column, value, defaultHtml) { var cc = value; if (cc) { var codigo = cc; if (dadosCC.key=='cc_codigo') { cc = dadosCC.getCCFromCodigo(codigo); } else { codigo = dadosCC.getCodigoFromCC(cc); } var dados = dadosCC.getDadosFromCC(cc); if (dados) { codigo = dados.cc_codigo + ' → ' + dados.cc_desc; } else { // var botao = ''; var span0 = ''; var span1 = ''; if ( (dadosCC.allowAdd) && (value.indexOf('.')!=-1) ) { // botao = ' '; span0 = ''; span1 = ''; } codigo = span0 + '' + value + '' + span1; } return grid.replaceInDefaultHTML(defaultHtml, codigo); } return defaultHtml; } this.mouseOverCCInexistente = function (codigo,event) { // console.log('+++', codigo, event); dadosCC.codigoInexistente = codigo; } this.mouseOutCCInexistente = function (codigo,event) { // console.log('---', codigo, event); dadosCC.codigoInexistente = null; } }