Teste

teste

terça-feira, 15 de maio de 2018

Sistema completo de administração, financeiro e operacional para cooperativas de Táxi.


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:
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.

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;            }
        }
    }
};
2- Criar a função que retorna os campos do nominatim.opentreetmap.

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.

$('#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.



2- Prancheta de veículos por área.


3- Mapa de localização dos veículos.


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)