BLOG DO ORLANDO CESAR MARTINS
Blog voltado para o desenvolvimento de aplicações WEB
Teste
teste
terça-feira, 15 de maio de 2018
terça-feira, 2 de janeiro de 2018
Kotlin
Boa tarde galera.
Estou convertendo um App de Java para Kotlin e tive um problema com o Activity Result, após pesquisas identifiquei o problema.
na linha:
Estou convertendo um App de Java para Kotlin e tive um problema com o Activity Result, após pesquisas identifiquei o problema.
na linha:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent)substituir por:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
terça-feira, 21 de fevereiro de 2017
Autocomplete typeahead nominatim openstreetmap
Bom dia a todos.
Fui surpreendido com um telefonema da Google, informando que minha aplicação esta violando clausulas contratuais na utilização da API do Google Maps. Minhas alternativas seriam:
1- Pagar cerca de R$ 46.000,00 por ano por uma licença Premium.
2- Migrar para uma solução OPEN. Foi o que fiz.
Abaixo segue as funções:
1- Criar as opções do auto complete.
2- Acrescentar o "onSelect" nas configurações com a chamada para a função que preenche os campos do formulário.
3- Configurar o seu campo Autocomplete.
4- Criar a função que preenche os campos do formulário.
Fui surpreendido com um telefonema da Google, informando que minha aplicação esta violando clausulas contratuais na utilização da API do Google Maps. Minhas alternativas seriam:
1- Pagar cerca de R$ 46.000,00 por ano por uma licença Premium.
2- Migrar para uma solução OPEN. Foi o que fiz.
Abaixo segue as funções:
1- Criar as opções do auto complete.
2- Criar a função que retorna os campos do nominatim.opentreetmap.
var enderecos = [];var q;var geo_autocomplete_opcoes = { ajax: { url: 'https://nominatim.openstreetmap.org/search/?format=json&addressdetails=1countrycodes="BR"', timeout: 500, displayField: "display", valueField: "id", triggerLength: 1, items: 100, method: "GET", dataType: "JSON", loadingClass: "wait", preDispatch: function (query) { q = query; return { q: q } }, preProcess: function (data) { enderecos = []; $.each(data, function (index, value) { var latitude = value.lat; var longitude = value.lon; var propriedades = value.address; var bairro = ''; if (propriedades.suburb) { bairro = propriedades.suburb; } else if (propriedades.town) { bairro = propriedades.town; } var localidade = ''; if (propriedades.neighbourhood) { localidade = propriedades.neighbourhood; } if (propriedades.road) { var rua = propriedades.road; } if (propriedades.city) { var cidade = propriedades.city; } if (bairro && rua && cidade) { propriedades.display = cidade + ' - ' + bairro + ' - ' + rua + ' - ' + q; if (localidade) { propriedades.display += ' - ' + localidade; } propriedades.latitude = latitude; propriedades.longitude = longitude; propriedades.id = value.place_id; enderecos.push(propriedades); } }); if (data.success === false) { return false; } else { return enderecos; } } } };
function preenche_endereco_open(elemento) { var deferred = $.Deferred(); try { var logradouro = elemento.road.toUpperCase(); var numero = elemento.housenumber; var cidade = elemento.city.toUpperCase(); var estado = converte_estado(cidade); var cep = elemento.postcode; var bairro = ''; if (elemento.suburb) { bairro = elemento.suburb.toUpperCase(); } else if (elemento.town) { bairro = elemento.town.toUpperCase(); } var localidade = ''; if (elemento.neighbourhood) { localidade = elemento.neighbourhood.toUpperCase(); } else { localidade = cidade; } if (!bairro) { bairro = 'GPS' } deferred.resolve({ "logradouro": logradouro, "numero": numero, "bairro": bairro, "localidade": localidade, "cidade": cidade, "estado": estado, "cep": cep, "latitude": elemento.latitude, "longitude": elemento.longitude }); return deferred; } catch (_erro) { alert('ERRO INESPERADO - 1025: ' + _erro); return {}; } }
2- Acrescentar o "onSelect" nas configurações com a chamada para a função que preenche os campos do formulário.
geo_autocomplete_opcoes["onSelect"] = function (item) { $.each(enderecos, function (idx, value) { if (item.value == value.id) { preenche_inputs(value); } });};
3- Configurar o seu campo Autocomplete.
$("#formulario").find("#campo_auto_complete").typeahead(geo_autocomplete_opcoes);
4- Criar a função que preenche os campos do formulário.
function preenche_inputs(elemento) { try { $.when(preenche_endereco_open(elemento)).then(function (obj) { $('#form').find('#logradouro').val(obj.logradouro); $('#form').find('#numero').val(obj.numero); $('#form').find('#bairro').val(obj.bairro); $('#form').find('#localidade').val(obj.localidade); $('#form').find('#cidade').val(obj.cidade); $('#form').find('#estado').val(obj.estado); $('#form').find('#cep').val(obj.cep); $('#form').find('#latitude').val(obj.latitude); $('#form').find('#longitude').val(obj.longitude); $('#form').find('#complemento').val(''); }); $('#form').find('#numero').focus(); } catch (_erro) { alert('ERRO INESPERADO - CLI-END-FORM: ' + _erro); } }
quinta-feira, 15 de dezembro de 2016
Django 1.10.4, Python 3.5, Apache mod_py
Olá pessoal houve algumas mudanças na configuração do <VirtualHost> do Apache, abaixo segue um exemplo:
<VirtualHost *:80>
DocumentRoot /opt/gestorweb/
ServerName gestorweb.taxiteleacademia.com.br
ServerAdmin ocmsilva@gmal.com
Alias /static/admin/ /usr/local/lib/python3.5/dist-packages/django/contrib/admin/static/admin/
Alias /static/ /opt/gestorweb/gestorweb/static/
Alias /media/ /opt/gestorweb/gestorweb/media/
WSGIDaemonProcess gestorweb python-path=/opt/gestorweb/
WSGIProcessGroup gestorweb
WSGIScriptAlias / /opt/gestorweb/gestorweb/wsgi.py
<Directory /opt/gestorweb/>
Require all granted
</Directory>
<Directory /opt/gestorweb/gestorweb/>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory /opt/gestorweb/gestorweb/static/>
Require all granted
</Directory>
<Directory /opt/gestorweb/gestorweb/media/>
Require all granted
</Directory>
<Directory /usr/local/lib/python3.5/dist-packages/django/contrib/admin/static/admin/>
Require all granted
</Directory>
</VirtualHost>
quinta-feira, 8 de dezembro de 2016
Bootstrap Form Modal
Boa Tarde a todos.
Depois de muistos testes, criei uma regra para NÃO fechar (hide) o Formulário Modal se existir erros.
Depois de muistos testes, criei uma regra para NÃO fechar (hide) o Formulário Modal se existir erros.
$('#form').on('submit', function () {
$.ajax({ type: $(this).attr('method'),
url: this.action,
data: $(this).serialize(),
context: this,
async: false,
success: function (data) { var erro = $(data).find("div.has-error");
if(erro.length > 0) { $('#modal_form').modal('hide');
$('#div_form_modal').html(data);
$('#modal_form').modal('show');
return false;
}
$('#modal_form').modal('hide');
}
});
return false;
});
segunda-feira, 28 de novembro de 2016
GestoWeb Versão 2.1
Tenho o imenso prazer de apresentar a nova versão do GestorWeb.
1- Tela de monitoramento das corridas, nesta tela você verá as corridas em andamento, corridas programadas e corridas que ainda estão sem viatura.
1- Tela de monitoramento das corridas, nesta tela você verá as corridas em andamento, corridas programadas e corridas que ainda estão sem viatura.
quinta-feira, 28 de abril de 2016
GestorWeb 1.0
Olá pessoal.
O Gestor (GestorWeb) é um sistema voltado para a administração total de uma Cooperativa de Táxi, este sistema integra todas as áreas da Cooperativa (Administrativa/Financeira/Operacional).
Hoje o sistema integra as seguintes características:
1- Comunicador: Sistema back-end que roda um Server Socket TCP/IP com o suporte do Python Twisted.
2- Receptor: Sistema Client Socket TCP/IP. Aplicativo do Smartphone.
3- Gestor: front-end de administração e monitoramento. (www.quicksys.com.br)
O Gestor (GestorWeb) é um sistema voltado para a administração total de uma Cooperativa de Táxi, este sistema integra todas as áreas da Cooperativa (Administrativa/Financeira/Operacional).
Hoje o sistema integra as seguintes características:
1- Comunicador: Sistema back-end que roda um Server Socket TCP/IP com o suporte do Python Twisted.
2- Receptor: Sistema Client Socket TCP/IP. Aplicativo do Smartphone.
3- Gestor: front-end de administração e monitoramento. (www.quicksys.com.br)
Assinar:
Postagens (Atom)



