PageSourceSearch

https://dudus.log.br/integracaoWebService/doc

html dudus.log.br collected 2026-10-02 01:18:47 UTC 67,623 bytes, 1,563 lines download raw bytes

1<!DOCTYPE html>
2<html lang="pt-br">
3
4<head>
5  <meta charset="UTF-8">
6  <title>Documentação para integração - dudus</title>
7  <meta name="description" content="">
8  <meta name="author" content="Mapp Sistemas">
9  <meta name="keywords" content="" />
10  <link rel="shortcut icon" href="configClientesNovos/sites/dudus/favicon.png">
11
12  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
13  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
14
15  <style>
16
17    @media screen and (max-width: 467px) {
18        .styleRuaN20{
19            max-width: 100px;
20            overflow: hidden;
21        }
22    }
23
24    @media (max-width: 991px) and (min-width: 767px) {
25        .styleRuaN20{
26            max-width: 125px;
27            overflow: hidden;
28        }
29    }
30
31    @media (min-width: 991px) {
32        .styleRuaN20{
33            max-width: 200px;
34            overflow: hidden;
35        }
36    }
37</style>
38
39
40<!-- Fontawesome 4.3.0 -->
41<link rel="stylesheet" href="../assets/css/font-awesome.min.css">
42
43<link rel="stylesheet" src="../oo/src/assets/css/ol.css" type="text/css"/>
44<link rel="stylesheet" src="../oo/src/assets/css/estilo-map-openlayers.css" type="text/css"/>
45
46<!-- Bootstrap CSS --> 
47<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/bootstrap.min.css">
48<!-- Owl Default CSS --> 
49<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/owl.default.min.css">
50<!-- Owl Carousel CSS --> 
51<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/owl.carousel.min.css">
52<!-- Owl Magnific CSS --> 
53<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/magnific-popup.css">
54<!-- Animate CSS --> 
55<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/animate.css">
56<!-- Boxicons CSS --> 
57<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/boxicons.min.css">
58<!-- Flaticon CSS --> 
59<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/flaticon.css">
60<!-- Image Light Box CSS --> 
61<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/imagelightbox.min.css">
62<!-- Meanmenu CSS -->
63<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/meanmenu.css">
64<!-- Nice Select CSS -->
65<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/nice-select.css">
66<!-- Odometer CSS-->
67<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/odometer.css">
68<!-- Icons Style CSS -->
69<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/style-icons.css">
70<!-- Agendar CSS -->
71<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/agendar.css">
72<!-- Style CSS -->
73<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/style.css?v=1">
74<!-- Responsive CSS -->
75<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/responsive.css">
76<!-- Css Layout index -->
77<link rel="stylesheet" href="../configClientesNovos/n20-layout/assets/css/index.css">
78
79<!-- style variáveis colors -->
80<style>
81    :root {
82        /* cor principal */
83        --main-color: #2e3456;
84        /* cor secundaria */
85        --sec-color: #00c6ed;
86    }
87</style>
88
89<script src="../assets/js/jquery-1.12.4.min.js"></script>
89
90<link rel="stylesheet" href="../assets/css/jquery-ui.css">
91<script src="../assets/js/jquery-ui.js"></script>
91
92
93<script src="../assets/js/jquery-migrate-1.4.1.js"></script>
93
94<style>
95    .ui-autocomplete {
96        max-height: 300px;
97        overflow-y: auto;
98        overflow-x: hidden;
99    }
100    * html .ui-autocomplete {
101        height: 300px;
102    }
103</style>
104
105<!-- Javascript do Openlayers -->
106<script src="https://cdnjs.cloudflare.com/polyfill/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
vendor: 1 bytes, line 106
106
107<script src="../oo/src/assets/js/ol.js" type="text/javascript"></script>
107
108
109<style>
110
111    :root{
112        --st-color-fonte-topo: #000000;
113        --st-color-fundo-topo: #fff;
114        --st-color-borda-topo: #ffdd21;
115        --st-color-fonte-barra-endereco: #fff;
116        --st-color-principal: #201e1e;
117        --st-color-rodape:#fff;
118        --st-color-fonte-segundaria: #fff;
119        --st-color-font-secundaria-n20: #000000;
120        --st-color-font-sec-nav: #000000;
121
122        --main-color: #201e1e;
123        --sec-color: #FFF;
124    }
125
126
127</style>
128
129<style>
130
131    :root{
132        /*
133          baixar
134        */
135        --color-svg-baixar-b_fil7: none; 
136        --color-svg-baixar-b_fil5: none;
137        --color-svg-baixar-b_fil3: #FEFEFE; 
138        --color-svg-baixar-b_fil18: #4B4B4D; 
139        --color-svg-baixar-b_fil1: #373435; 
140        --color-svg-baixar-b_fil24: #EB3337; 
141        --color-svg-baixar-b_fil4: #D4D6D5; 
142        --color-svg-baixar-b_fil0: #CDE8DA; 
143        --color-svg-baixar-b_fil6: #A2D188; 
144        --color-svg-baixar-b_fil8: #474646; 
145        --color-svg-baixar-b_fil11: #0E3A82; 
146        --color-svg-baixar-b_fil10: #0F2D5C; 
147        --color-svg-baixar-b_fil12: #255096; 
148        --color-svg-baixar-b_fil15: #91D5FF; 
149        --color-svg-baixar-b_fil16: #B3E2FF; 
150        --color-svg-baixar-b_fil9: #CCDFF9; 
151        --color-svg-baixar-b_fil13: #DCEAFB; 
152        --color-svg-baixar-b_fil17: #E38540; 
153        --color-svg-baixar-b_fil14: #F09959; 
154        --color-svg-baixar-b_fil19: #FB8627; 
155        --color-svg-baixar-b_fil23: #cc6600; 
156        --color-svg-baixar-b_fil20: #cc6600; 
157        --color-svg-baixar-b_fil22: #a75300; 
158        --color-svg-baixar-b_fil21: #cc6600; 
159        --color-svg-baixar-b_fil2: #cc6600; 
160        /*
161          sobre
162        */
163        --color-svg-sobre-s_fil30: #B4BCC9; 
164        --color-svg-sobre-s_fil41: #211F20; 
165        --color-svg-sobre-s_fil35: #302A3B; 
166        --color-svg-sobre-s_fil7: #33002B; 
167        --color-svg-sobre-s_fil33: #3B3348; 
168        --color-svg-sobre-s_fil45: #545C75; 
169        --color-svg-sobre-s_fil46: #606780; 
170        --color-svg-sobre-s_fil34: #6B6975; 
171        --color-svg-sobre-s_fil9: #6C2D43; 
172        --color-svg-sobre-s_fil44: #7C7982; 
173        --color-svg-sobre-s_fil29: #81808E; 
174        --color-svg-sobre-s_fil2: #837E8B; 
175        --color-svg-sobre-s_fil37: #84404E; 
176        --color-svg-sobre-s_fil22: #8585C1; 
177        --color-svg-sobre-s_fil24: #955045; 
178        --color-svg-sobre-s_fil43: #99B4DD; 
179        --color-svg-sobre-s_fil3: #9D9DD9; 
180        --color-svg-sobre-s_fil25: #A15D50; 
181        --color-svg-sobre-s_fil27: #A25E51; 
182        --color-svg-sobre-s_fil23: #B16E5F; 
183        --color-svg-sobre-s_fil1: #B7D0F9; 
184        --color-svg-sobre-s_fil26: #C2988F; 
185        --color-svg-sobre-s_fil19: #D37B75; 
186        --color-svg-sobre-s_fil31: #D3D6DD; 
187        --color-svg-sobre-s_fil18: #D77F7A; 
188        --color-svg-sobre-s_fil28: #DFE0FC; 
189        --color-svg-sobre-s_fil42: #E2806D; 
190        --color-svg-sobre-s_fil47: #E48771; 
191        --color-svg-sobre-s_fil11: #E48C77; 
192        --color-svg-sobre-s_fil4: #E5918A; 
193        --color-svg-sobre-s_fil40: #E59280;
194        --color-svg-sobre-s_fil38: #E69888;
195        --color-svg-sobre-s_fil36: #E8A396;
196        --color-svg-sobre-s_fil16: #E9A492;
197        --color-svg-sobre-s_fil5: #E9A7B2;
198        --color-svg-sobre-s_fil17: #EAAC9A;
199        --color-svg-sobre-s_fil32: #ECF1F7;
200        --color-svg-sobre-s_fil14: #EDB6A5;
201        --color-svg-sobre-s_fil39: #EDB7A9;
202        --color-svg-sobre-s_fil10: #EDB8A7;
203        --color-svg-sobre-s_fil13: #EEBDAD;
204        --color-svg-sobre-s_fil15: #F1C5BB;
205        --color-svg-sobre-s_fil8: #F1CDBE;
206        --color-svg-sobre-s_fil21: #F3F3F3;
207        --color-svg-sobre-s_fil12: #F9E3DE;
208        --color-svg-sobre-s_fil6: #F9F0E9;
209        --color-svg-sobre-s_fil20: #FDFAF7;
210        --color-svg-sobre-s_fil0: white;
211        /*
212          documentacao
213        */
214        --color-svg-doc-str0: #6EA2D6;
215        --color-svg-doc-str3: #3073AD;
216        --color-svg-doc-str2: #435998;
217        --color-svg-doc-str1: #6EA2D6;
218        --color-svg-doc-d_fil14: none;
219        --color-svg-doc-d_fil12: #FEFEFE;
220        --color-svg-doc-d_fil47: #E6E7E8;
221        --color-svg-doc-d_fil34: #FFD580;
222        --color-svg-doc-d_fil5: #F8A887;
223        --color-svg-doc-d_fil9: #F7A280;
224        --color-svg-doc-d_fil10: #E18A74;
225        --color-svg-doc-d_fil11: #E98F75;
226        --color-svg-doc-d_fil20: #5E2E44;
227        --color-svg-doc-d_fil45: #F6B992;
228        --color-svg-doc-d_fil46: #DDA083;
229        --color-svg-doc-d_fil43: #F4B892;
230        --color-svg-doc-d_fil3: #E7977B;
231        --color-svg-doc-d_fil26: #CD5783;
232        --color-svg-doc-d_fil27: #813B55;
233        --color-svg-doc-d_fil48: #C7EAFB;
234        --color-svg-doc-d_fil39: #A34E75;
235        --color-svg-doc-d_fil17: #8A3B5A;
236        --color-svg-doc-d_fil25: #A5DEF5;
237        --color-svg-doc-d_fil0: #A0ADD4;
238        --color-svg-doc-d_fil19: #4B3128;
239        --color-svg-doc-d_fil8: #48372F;
240        --color-svg-doc-d_fil18: #392E28;
241        --color-svg-doc-d_fil44: #432D2B;
242        --color-svg-doc-d_fil40: #582F40;
243        --color-svg-doc-d_fil13: #47C2C8;
244        --color-svg-doc-d_fil29: #47B1E4;
245        --color-svg-doc-d_fil38: #6779BA;
246        --color-svg-doc-d_fil35 : #464F77;
247        --color-svg-doc-d_fil21: #6C5AA5;
248        --color-svg-doc-d_fil6: #2F3543;
249        --color-svg-doc-d_fil4: #2B303C;
250        --color-svg-doc-d_fil1: #313133;
251        --color-svg-doc-d_fil32: #29292B;
252        --color-svg-doc-d_fil2: #232223;
253        --color-svg-doc-d_fil28: #4E83C2;
254        --color-svg-doc-d_fil37: #5F67AD;
255        --color-svg-doc-d_fil7: #01BBC7;
256        --color-svg-doc-d_fil36: #4D528C;
257        --color-svg-doc-d_fil31: #1A83A5;
258        --color-svg-doc-d_fil24: #435998;
259        --color-svg-doc-d_fil23: #384575;
260        --color-svg-doc-d_fil33: #3F5A8E;
261        --color-svg-doc-d_fil30: #294871;
262        --color-svg-doc-d_fil22: #2E3C6E;
263        --color-svg-doc-d_fil16: #2A599B;
264        --color-svg-doc-d_fil15: #2D4F78;
265        --color-svg-doc-d_fil42: #1C60AB;
266        --color-svg-doc-d_fil41: #21518F;
267        /*
268          porque
269        */
270        --color-svg-porque-pq_fil17: #FEFEFE;
271        --color-svg-porque-pq_fil39: #FDBE47;
272        --color-svg-porque-pq_fil46: #FDBA2F;
273        --color-svg-porque-pq_fil57: #F9AB88;
274        --color-svg-porque-pq_fil12: #F7A07A;
275        --color-svg-porque-pq_fil9: #F5895F;
276        --color-svg-porque-pq_fil18: #F05F6F;
277        --color-svg-porque-pq_fil33: #EE4E9B;
278        --color-svg-porque-pq_fil48: #EF4F78;
279        --color-svg-porque-pq_fil31: #EE3C70;
280        --color-svg-porque-pq_fil21: #F1F9FD;
281        --color-svg-porque-pq_fil45: #F1F1F0;
282        --color-svg-porque-pq_fil8: #E2714D;
283        --color-svg-porque-pq_fil2: #E4ECF7;
284        --color-svg-porque-pq_fil0: #E1EAF6;
285        --color-svg-porque-pq_fil7: #E1E7F1;
286        --color-svg-porque-pq_fil38: #E2A23A;
287        --color-svg-porque-pq_fil20: #D3D8E0;
288        --color-svg-porque-pq_fil56: #D0805E;
289        --color-svg-porque-pq_fil13: #D1DCE6;
290        --color-svg-porque-pq_fil36: #CB3270;
291        --color-svg-porque-pq_fil3: #C8D8EF;
292        --color-svg-porque-pq_fil1: #B1CBEA;
293        --color-svg-porque-pq_fil47: #A0C5E8;
294        --color-svg-porque-pq_fil19: #A594C6;
295        --color-svg-porque-pq_fil34: #88CAEF;
296        --color-svg-porque-pq_fil4: #88ADDB;
297        --color-svg-porque-pq_fil43: #66CBE8;
298        --color-svg-porque-pq_fil30: #70ACDD;
299        --color-svg-porque-pq_fil52: #7BC24D;
300        --color-svg-porque-pq_fil35: #63A6DA;
301        --color-svg-porque-pq_fil27: #7676B6;
302        --color-svg-porque-pq_fil24: #3AC6F4;
303        --color-svg-porque-pq_fil6: #53AEE1;
304        --color-svg-porque-pq_fil5: #59A7DC;
305        --color-svg-porque-pq_fil44: #38C2D9;
306        --color-svg-porque-pq_fil14: #509FD6;
307        --color-svg-porque-pq_fil16: #96A5C1;
308        --color-svg-porque-pq_fil32: #EE4E90;
309        --color-svg-porque-pq_fil53: #4FB852;
310        --color-svg-porque-pq_fil28: #5484C2;
311        --color-svg-porque-pq_fil50: #3697CE;
312        --color-svg-porque-pq_fil37: #487BBD;
313        --color-svg-porque-pq_fil15: #463A51;
314        --color-svg-porque-pq_fil25: #5E4F9E;
315        --color-svg-porque-pq_fil58: #563D6A;
316        --color-svg-porque-pq_fil51: #28AC54;
317        --color-svg-porque-pq_fil29: #525FA9;
318        --color-svg-porque-pq_fil26: #4F3E8E;
319        --color-svg-porque-pq_fil42: #404898;
320        --color-svg-porque-pq_fil10: #2D53A2;
321        --color-svg-porque-pq_fil11: #354A83;
322        --color-svg-porque-pq_fil55: #37498E;
323        --color-svg-porque-pq_fil54: #39457E;
324        --color-svg-porque-pq_fil49: #3C3E77;
325    }
326
327</style>
328
329<!--[if lt IE 9]>
330  
330<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
330
331  
331<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
331
332<![endif]-->
333<script>
334    var dominioCorrente = 'dudus';
335
336    async function calcularDistanciaPeloGoogle(tipoVeiculo, inicio, fim, p1, p2, retorno) {
337
338        console.log('====> DATA HORA:: ' + new Date());
339
340        let validarDataHora = '';
341        let departureTime = '';
342
343        let start = inicio;
344        let end = fim;
345        let arrayLaLo = [];
346        let rotaMaisCurta = 'N';
347
348        if ((tipoVeiculo == 'A') || (tipoVeiculo == 'M') || (tipoVeiculo == 'D') || (tipoVeiculo == 'B') || (tipoVeiculo == 'AC') || (tipoVeiculo == 'MC') || (tipoVeiculo == 'DC') || (tipoVeiculo == 'BC') || (tipoVeiculo == 'X')) {
349            rotaMaisCurta = 'S';
350        }
351
352        if (tipoVeiculo == '') {
353            tipoVeiculo = 'M';
354        }
355
356        if (dominioCorrente == 'edumotoboy') {
357            tipoVeiculo = 'B';
358        }
359
360        if (dominioCorrente == 'virtuan') {
361            tipoVeiculo = 'B';
362        }
363
364        if (dominioCorrente == 'logmoto') {
365            if (tipoVeiculo == 'MC') {
366                rotaMaisCurta = 'N';
367            }
368        }
369
370        arrayLaLo.push(new google.maps.LatLng(inicio));
371        arrayLaLo.push(new google.maps.LatLng(fim));
372
373        console.log('.... p1 = ' + p1 + ' start ' + start + ' end =  ' + end);
374
375        let directionsService = new google.maps.DirectionsService();
376        let tipoVeiculoUsuario = tipoVeiculo;
377
378        let request = {
379            origin: start,
380            destination: end,
381            travelMode: 'DRIVING',
382            provideRouteAlternatives: true,
383            unitSystem: google.maps.UnitSystem.METRIC
384        };
385
386        if (validarDataHora) {
387            let request = {
388                origin: start,
389                destination: end,
390                travelMode: 'DRIVING',
391                provideRouteAlternatives: true,
392                unitSystem: google.maps.UnitSystem.METRIC,
393                drivingOptions: {
394                    departureTime: departureTime,
395                    trafficModel: 'bestguess'
396                }
397            };
398        }
399
400        if (tipoVeiculoUsuario == 'B') { // bicicleta
401
402            request = {
403                origin: start,
404                destination: end,
405                travelMode: 'BICYCLING',
406                provideRouteAlternatives: true
407            };
408
409            if (validarDataHora) {
410                let request = {
411                    origin: start,
412                    destination: end,
413                    travelMode: 'BICYCLING',
414                    provideRouteAlternatives: true,
415                    unitSystem: google.maps.UnitSystem.METRIC,
416                    drivingOptions: {
417                        departureTime: departureTime,
418                        trafficModel: 'bestguess'
419                    }
420                };
421            }
422        }
423
424        directionsService.route(request, function(result, status) {
425
426            console.log('status:: ' + status);
427
428            var indexTT = p2;
429
430            var optionsDisplay = {
431                map: mapa,
432                suppressMarkers: true,
433                preserveViewport: true
434            }
435
436            if (arrayDirectionsDisplay) {
437
438                if (typeof arrayDirectionsDisplay[indexTT] != 'undefined') {
439                    arrayDirectionsDisplay[indexTT].setMap(null);
440                }
441            }
442
443            var ponto1 = p1;
444            var ponto2 = p2;
445            var menorDistancia = 0;
446            var menorDuracao = 0;
447            var melhorRota = 0;
448            var duracaoRotaMaisRapida = 0;
449            var distanciaRotaMaisRapida = 0;
450            var melhorRotaTempo = 0;
451            var ponto2Int = parseInt(ponto2);
452
453            switch (status) {
454                case google.maps.DirectionsStatus.OVER_QUERY_LIMIT:
455                    console.log('OVER_QUERY_LIMIT ');
456                    /**
457                     * o Google está limitando a 10 consultas por segundo
458                     * por isso implementamos aqui se cair no limite
459                     * após 1 segundo chamamos a função
460                     * loopCalcularTodasDistanciaVazio()
461                     * para buscar novamente a distância
462                     */
463
464                    setTimeout(function() {
465                        loopCalcularTodasDistanciaVazio();
466                    }, 1000);
467
468                    break;
469            }
470
471            if (status == google.maps.DirectionsStatus.OK) { // Se deu tudo certo
472
473                var myroute = '';
474                var melhorRota = 0;
475
476                var total = 0;
477                var duracao = 0;
478                var rotaAnterior = 0;
479                var rotaAtual = 0;
480                var indexD = 0;
481                var indexT = 0;
482                var index = 0;
483
484                for (j = 0; j < result.routes.length; j++) {
485
486                    myroute = result.routes[j];
487
488                    for (var i = 0; i < myroute.legs.length; i++) {
489
490                        total = myroute.legs[i].distance.value;
491                        duracao = myroute.legs[i].duration.value;
492
493                        console.log('duracao ' + duracao + ' distancia total =' + total);
494                    }
495                    if (rotaAnterior === 0) {
496                        rotaAnterior = total;
497                        menorDistancia = total;
498
499                        indexD = j;
500                        console.log('menorDuracao ' + menorDuracao + '== duracao =' + duracao + " indexD " + indexD);
501
502                    } else if (rotaAnterior < total) {
503                        total = rotaAnterior;
504                    } else {
505                        menorDistancia = total;
506                        rotaAnterior = total;
507
508                        indexD = j;
509                        console.log('menorDuracao ' + menorDuracao + '== duracao =' + duracao + " indexD " + indexD);
510                    }
511                    /**
512                     * pegar a menor duração
513                     */
514                    if (menorDuracao === 0) {
515                        menorDuracao = duracao;
516                    } else {
517                        if (menorDuracao > duracao) {
518                            menorDuracao = duracao;
519
520                        }
521                    }
522
523                    if (duracaoRotaMaisRapida == 0) {
524                        duracaoRotaMaisRapida = duracao;
525                        distanciaRotaMaisRapida = total;
526
527                        indexT = j;
528                    } else {
529                        if (duracao < duracaoRotaMaisRapida) {
530                            duracaoRotaMaisRapida = duracao;
531                            distanciaRotaMaisRapida = total;
532                            indexT = j;
533                        }
534                    }
535
536                }
537
538                index = indexD;
539                if (rotaMaisCurta === 'N') {
540                    /**
541                     * aqui pega a rota mais rápida e não a mais curta
542                     */
543                    menorDistancia = distanciaRotaMaisRapida;
544                    menorDuracao = duracaoRotaMaisRapida;
545                    index = indexT;
546                }
547
548                calculandoDistanciaPonto[ponto2Int] = 'T'; // terminou de calcular
549
550                console.log(' calculandoDistanciaPonto p2=  ' + calculandoDistanciaPonto[ponto2Int] + ' ponot ' + ponto2Int + ' retorno ' + retorno);
551
552                console.log('menorDistancia:: ' + menorDistancia);
553
554                console.log('distancia p2:: ' + p2)
555                console.log('retorno p2:: ' + retorno)
556                console.log('menorDistancia p2:: ' + menorDistancia)
557                console.log('menorDuracao p2:: ' + menorDuracao)
558
559                if (retorno == '') {
560
561                    $('#distancia' + p2).val(menorDistancia);
562                    $('#duracao' + p2).val(menorDuracao);
563
564                    if (document.getElementById('erroColeta' + p2)) {
565                        $('#erroColeta' + p2).text('');
566                    }
567                } else {
568
569                    $('#distanciaR').val(menorDistancia);
570                    $('#duracaoR').val(menorDuracao);
571                }
572                /**
573                 * loop mostra para cliente quais ainda falta para calcular
574                 */
575                loopVerificarTodasDistanciaVazio();
576
577                if (document.getElementById("rotaPoline" + p2)) {
578
579                    let aux = [];
580                    let arryLaLo = result.routes[index].overview_path;
581
582                    arryLaLo.forEach(function(e) {
583                        aux.push([e.lat(), e.lng()]);
584                    });
585
586                    document.querySelector("#rotaPoline" + p2).value = JSON.stringify(aux);
587                }
588
589                var decodedPoints = result.routes[index].overview_path;
590                var arrayPoligno = [];
591
592                decodedPoints.map(function(a) {
593                    arrayPoligno.push({
594                        lat: a.lat(),
595                        lng: a.lng()
596                    });
597                });
598
599                //campos usando no para armazenar DirectionsRenderer para cada rota no endereço
600                // e tambem para armazena as polyline das rotas.
601
602                if (document.getElementById('rotaPoline')) {
603                    document.getElementById('rotaPoline').value = '';
604                }
605
606
607            } else {
608                console.log(' status else ok');
609                calculandoDistanciaPonto[ponto2Int] = 'T'; // terminou de calcular
610            }
611
612        });
613    }
614
615    function loopVerificarTodasDistanciaVazio() {
616
617        var pontoInicio = 2;
618        var numeroEnderecosExiste = $("#identificadorEndereco").val();
619        var neeInt = parseInt(numeroEnderecosExiste);
620        neeInt--;
621        a = pontoInicio;
622
623        var precisaRecalcular = 'N';
624        var pontoInicio = 0;
625        var msg = '';
626        while (a <= neeInt) {
627            /**
628             * verifica se distancia esta vazio
629             */
630            var distancia = document.getElementById('distancia' + a).value;
631            if ((distancia === '') || (distancia === undefined)) {
632
633                precisaRecalcular = 'S';
634                if (pontoInicio === 0) {
635                    pontoInicio = a - 1;
636                }
637                msg += ' Ponto ' + a + '<br />';
638            }
639            a++;
640        }
641        if (document.getElementById('divInfodist')) {
642            if (msg !== '') {
643                msg = 'Calculando distâncias, aguarde... <br /> ' + msg + ' ';
644            }
645            document.getElementById('divInfodist').innerHTML = msg;
646        }
647        $('#divGif').html('');
648    }
649
650    function calcularDistanciagraphhopper(pontos1, pontos2, menorDistancia, menorDuracao) {
651
652        if (pontos1 != '' || pontos1 != undefined) {
653
654            console.log(' pontos ' + pontos1);
655            var pontosInicio = pontos1.split(',');
656            var laInicio = pontosInicio[0];
657            var loInicio = pontosInicio[1];
658            laInicio = Number(laInicio);
659            loInicio = Number(loInicio);
660
661            console.log(' laInicio = ' + laInicio + ' loInicio ' + loInicio);
662
663            var pontosFim = pontos2.split(',');
664            var laFim = pontosFim[0];
665            var loFim = pontosFim[1];
666            laFim = Number(laFim);
667            loFim = Number(loFim);
668
669            console.log(' laFim = ' + laFim + ' loFim ' + loFim);
670
671            var point = [];
672            point[0] = ['ponto 1'];
673            point[0].lat = laInicio;
674            point[0].long = loInicio;
675
676            point[1] = ['ponto 2'];
677            point[1].lat = laFim;
678            point[1].long = loFim;
679
680            let pointComplete = '';
681            for (var prop in point) {
682                pointComplete += 'point=' + point[prop].lat + ',' + point[prop].long + '&';
683            }
684
685            let url = new URL('https://graphhopper.com/api/1/route?' + pointComplete);
686
687            url.searchParams.set('vehicle', 'car'); //tipo de veiculo
688            url.searchParams.set('locale', 'pt_BR');
689            url.searchParams.set('calc_points', 'true'); //retorna rota 
690            url.searchParams.set('key', '3754f47e-6c49-41f5-aba8-92303ca87061');
691
692            var resposta = [];
693            var distancia = '';
694            var tempo = '';
695            let request = new XMLHttpRequest();
696
697            request.open('GET', url);
698            request.responseType = 'json'
699            request.send();
700            request.onload = function() {
701
702                switch (request.status) {
703                    case 200:
704                        resposta['status'] = 200;
705                        resposta['resposta'] = request.response;
706                        distancia = request.response.paths[0].distance;
707                        tempo = request.response.paths[0].time;
708                        //console.log(request.response.paths[0].distance);
709                        console.log(request.response);
710                        console.log('graphhopper distancia ' + distancia + ' tempo ' + tempo);
711                        console.log('Google menorDistancia = ' + menorDistancia + ' menorDuracao ' + menorDuracao);
712
713                        var kmGrap = distancia / 1000;
714                        var kmGoogle = menorDistancia / 1000;
715                        var diferenca = kmGoogle - kmGrap;
716
717                        console.log('Google km = ' + kmGoogle + ' kmGrap ' + kmGrap + ' diferença = ' + diferenca);
718
719                        $.post("enderecosServico/enderecoAdicional/ajaxInsereDadosGraphhopperBanco.php", {
720                                kmGrap: kmGrap,
721                                kmGoogle: kmGoogle,
722                                diferenca: diferenca,
723                                tempo: tempo,
724                                menorDuracao: menorDuracao,
725                                pontos1: pontos1,
726                                pontos2: pontos2
727                            },
728                            function(retorno) {
729                                $('#divJsonTeste').html(retorno);
730
731                            }, 'html');
732
733                        break;
734                    case 400:
735                        resposta['status'] = 400;
736                        resposta['resposta'] = 'Sua solicitação não é válida. Por exemplo, você especificou poucos ou muitos pontos.';
737                        break;
738                    case 401:
739                        resposta['status'] = 401;
740                        resposta['resposta'] = 'Autenticação necessária';
741                        break;
742                    case 429:
743                        resposta['status'] = 429;
744                        resposta['resposta'] = 'Limite de API alcançado.';
745                        break;
746                    case 500:
747                        resposta['status'] = 500;
748                        resposta['resposta'] = 'Erro do Servidor Interno. Notificação automática.';
749                        break;
750                    case 501:
751                        resposta['status'] = 501;
752                        resposta['resposta'] = 'Apenas uma lista especial de veículos é suportada.';
753                        break;
754                }
755
756            };
757
758        }
759    }
760</script>
vendor: 1 bytes, line 760
760
761<script type="text/javascript">
762    var displayObject = false;
763    var tipoCalculoPonto = ''
764
765    function validateLatLng(latitude, longitude) {
766        // let pattern = new RegExp('^-?([1-8]?[1-9]|[1-9]0)\\.{1}\\d{1,6}');
767        // return pattern.test(latitude) && pattern.test(longitude);
768
769        const latitudeRegex = /^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?)$/;
770        const longitudeRegex = /^[-+]?([1-9]?\d(\.\d+)?|1[0-7]\d(\.\d+)?|180(\.0+)?)$/;
771
772        if (latitudeRegex.test(latitude) && longitudeRegex.test(longitude)) {
773            return true;
774        } else {
775            return false;
776        }
777
778    }
779
780    // FUNÇÃO PARA TENTAR EFETUAR O CÁLCULO DE FRETE NOVAMENTE
781    async function retryCalculate(p1, p2, retorno) {
782        const START = `${$(`#latitudeE${p1}`).val()},${$(`#longitudeE${p1}`).val()}`
783        const END = `${$(`#latitudeE${p2}`).val()},${$(`#longitudeE${p2}`).val()}`
784
785        const START_ADDRESS = $(`#txtEnderecoE${p1}`).val();
786        const END_ADDRESS = $(`#txtEnderecoE${p2}`).val();
787
788        const VEHICLE_TYPE = $(`#tipoVeiculo`).val() ? $(`#tipoVeiculo`).val() : "";
789
790        var isCalculating = false;
791        if (calculandoDistanciaPonto.indexOf(p2)) {
792            if (calculandoDistanciaPonto[p2] !== "S") {
793                calculandoDistanciaPonto[p2] = "S";
794                isCalculating = true;
795            }
796        }
797
798        if (isCalculating) {
799            $(`#divGif`).html(`<img src="imagens/carregando.gif" /><br />Aguarde...`);
800
801            /*
802            const asyncAjax = async (start, end, vehicleType, startAddress, endAddress) => {
803                return new Promise((response, rejection) => {
804                    $.post("enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRotaJavascript.php", {
805                        inicio: start,
806                        fim: end,
807                        p1: p1,
808                        p2: p2,
809                        retorno: retorno,
810                        tipoVeiculo: vehicleType,
811                        endPonto1: startAddress,
812                        endPonto2: endAddress
813                    }, html => {
814                        $("#divGif").html(html);
815                        response(true);
816                    }, "html");
817                });
818            }*/
819
820            const asyncAjax = async (start, end, vehicleType, startAddress, endAddress) => {
821                return new Promise((resolve, reject) => {
822                    $.ajax({
823                        url: "enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRotaJavascript.php",
824                        type: "POST",
825                        data: {
826                            inicio: start,
827                            fim: end,
828                            p1: p1,
829                            p2: p2,
830                            retorno: retorno,
831                            tipoVeiculo: vehicleType,
832                            endPonto1: startAddress,
833                            endPonto2: endAddress
834                        },
835                        dataType: "html",
836                        timeout: 15000,
837                        success: function(html) {
838                            $("#divGif").html(html);
839                            resolve(true);
840                        },
841                        error: function(jqXHR, textStatus, errorThrown) {
842                            console.error(" Erro Ajax:", errorThrown);
843
844                            if (textStatus === "timeout") {
845                                console.warn("Timeout de 10 segundos atingido.");
846                            }
847                            $("#divGif").html("Desculpe houver um erro tente novamente.");
848                            reject(false);
849                        }
850                    });
851                });
852            };
853
854            await asyncAjax();
855        }
856    }
857
858    function calcularDistanciaRota(p1, p2, retorno) {
859        // alert('calcularDistanciaRota');
860        return new Promise((resolve, reject) => { // reject declarado mas não usado — resolve sempre para não travar o Worker Pool
861
862        const params = new URLSearchParams(window.location.search);
863
864
865        if (($("#latitudeE" + p1).val() !== '') & ($("#latitudeE" + p2).val() !== '')) {
866            // alert('tipoCalculoPonto: ' + tipoCalculoPonto);
867            if (tipoCalculoPonto == 'P1') {
868                var inicio = $("#latitudeE1").val() + "," + $("#longitudeE1").val();
869
870                let p1Num = parseInt(p1);
871                let p2Num = parseInt(p2);
872
873                if (p1Num > p2Num) {
874                    var inicio = $("#latitudeE" + p1).val() + "," + $("#longitudeE" + p1).val();
875                }
876            } else {
877                var inicio = $("#latitudeE" + p1).val() + "," + $("#longitudeE" + p1).val();
878            }
879            var fim = $("#latitudeE" + p2).val() + "," + $("#longitudeE" + p2).val();
880            var endPonto1 = $("#txtEnderecoE" + p1).val();
881            var endPonto2 = $("#txtEnderecoE" + p2).val();
882            // DEFINE SE DEVERÁ TENTAR FAZER O CÁLCULO NOVAMENTE
883            const TENTAR_CALCULAR_NOVAMENTE = true;
884            const RETORNO_PRIMEIRO_PONTO = retorno;
885            // console.log('vai chamar ajax p1 ' + p1 + ' p2 ' + p2);
886            /**
887             * calcular rota pelo ajax
888             */
889            var tipoVeiculo = '';
890            if (document.getElementById('tipoVeiculo')) {
891                tipoVeiculo = document.getElementById('tipoVeiculo').value;
892            }
893
894            // document.getElementById('divJsonTeste').innerHTML += '<br> inicio= ' + inicio + ' fim = ' + fim;
895
896            var calculando = 'S';
897            if (calculandoDistanciaPonto.indexOf(p2)) {
898                console.log('index calculandoDistanciaPonto p2 ' + calculandoDistanciaPonto[p2] + ' p2= ' + p2);
899                if (calculandoDistanciaPonto[p2] !== 'S') {
900
901                    calculandoDistanciaPonto[p2] = 'S';
902                    console.log('vai calcular ' + p1 + ' p2 ' + p2);
903
904                    calculando = 'S';
905                }
906            }
907
908            console.log('inicio: ' + inicio + ' | fim: ' + fim + ' | validador: ' + validateLatLng(inicio, fim));
909            // console.log('latitudeEP1: ' + $("#latitudeE" + p1).val() + ' | latitudeEP1: ' + $("#latitudeE" + p1).val() + ' | validador: ' + validateLatLng($("#latitudeE" + p1).val(), $("#longitudeE" + p1).val()));
910            // console.log('latitudeEP2: ' + $("#latitudeE" + p2).val() + ' | latitudeEP2: ' + $("#latitudeE" + p2).val() + ' | validador: ' + validateLatLng($("#latitudeE" + p2).val(), $("#longitudeE" + p2).val()));
911
912            if (validateLatLng($("#latitudeE" + p1).val(), $("#longitudeE" + p1).val()) != true) {
913                calculando = 'N';
914            }
915
916            if (validateLatLng($("#latitudeE" + p2).val(), $("#longitudeE" + p2).val()) != true) {
917                calculando = 'N';
918            }
919
920            console.log('calculando: ' + calculando);
921            if (calculando == 'S') {
922
923                document.getElementById('divGif').innerHTML = '<img src="imagens/carregando.gif" /><br />Aguarde...';
924                console.log('inicio ' + inicio + ' fim ' + fim + ' p1' + p1 + ' p2 ' + p2 + ' retorno' + retorno + ' tipoVeiculo' + tipoVeiculo);
925                /*
926                                //            $.post("enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRota.php", {
927                                $.post("enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRotaJavascript.php", {
928                                    inicio: inicio,
929                                    fim: fim,
930                                    p1: p1,
931                                    p2: p2,
932                                    retorno: retorno,
933                                    tipoVeiculo: tipoVeiculo,
934                                    endPonto1: endPonto1,
935                                    endPonto2: endPonto2
936                                }, function(retorno) {
937                                    $('#divGif').html(retorno);
938                                    //console.log('SUCESSO ajaxCalculaDistanciaRotaJavascript.PHP');
939                                    if (TENTAR_CALCULAR_NOVAMENTE && RETORNO_PRIMEIRO_PONTO) {
940                                        setTimeout(() => {
941                                            const DISTANCIA_RETORNO = parseInt($(`#distanciaR`).val());
942
943                                            if (!DISTANCIA_RETORNO) {
944                                                retryCalculate(p1, p2, RETORNO_PRIMEIRO_PONTO);
945                                            }
946                                        }, 150);
947                                    }
948
949                                    $('#btnCalcFreteCEN').attr('disabled', false);
950                                }, 'html');
951                */
952                $('#btnCalcFreteCEN').attr('disabled', true);
953                // Executar o ajax após o sleep
954
955                let setTimeOutPassar = 'N';
956                if (params.get("calculoDistancia") == 'S' || params.get("editarReabrir") == 'S') {
957                    setTimeOutPassar = 'S';
958                }
959
960                if (setTimeOutPassar == 'S') {
961
962                    setTimeout(function() {
963                        // Atualizar para mostrar que está calculando
964                        document.getElementById('divGif').innerHTML = '<img src="imagens/carregando.gif" /><br />Calculando rota...';
965
966                        $.ajax({
967                            url: "enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRotaJavascript.php",
968                            method: "POST",
969                            data: {
970                                inicio: inicio,
971                                fim: fim,
972                                p1: p1,
973                                p2: p2,
974                                retorno: retorno,
975                                tipoVeiculo: tipoVeiculo,
976                                endPonto1: endPonto1,
977                                endPonto2: endPonto2
978                            },
979                            dataType: "html",
980                            timeout: 15000,
981                            success: function(retornoHtml) {
982                                $('#divGif').html(retornoHtml);
983
984                                if (TENTAR_CALCULAR_NOVAMENTE && RETORNO_PRIMEIRO_PONTO) {
985                                    setTimeout(() => {
986                                        const DISTANCIA_RETORNO = parseInt($(`#distanciaR`).val());
987
988                                        if (!DISTANCIA_RETORNO) {
989                                            retryCalculate(p1, p2, RETORNO_PRIMEIRO_PONTO);
990                                        }
991                                    }, 150);
992                                }
993
994                                $('#btnCalcFreteCEN').attr('disabled', false);
995                                resolve({ status: 'sucesso', data: retornoHtml });
996                            },
997                            error: function(jqXHR, textStatus, errorThrown) {
998                                console.error("Erro na requisição:", errorThrown);
999
1000                                if (textStatus === "timeout") {
1001                                    console.warn("Tempo limite de 15 segundos excedido.");
1002                                }
1003
1004                                $('#btnCalcFreteCEN').attr('disabled', false);
1005                                $('#divGif').html('<div class="alert alert-warning">Erro ao calcular rota. Tente novamente.</div>');
1006                                resolve({ status: 'erro', msg: errorThrown }); // resolve mesmo em erro — não trava o Worker Pool
1007                            }
1008                        });
1009                    }, 1000);
1010                } else {
1011                    // Atualizar para mostrar que está calculando
1012                    document.getElementById('divGif').innerHTML = '<img src="imagens/carregando.gif" /><br />Calculando rota...';
1013
1014                    $.ajax({
1015                        url: "enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRotaJavascript.php",
1016                        method: "POST",
1017                        data: {
1018                            inicio: inicio,
1019                            fim: fim,
1020                            p1: p1,
1021                            p2: p2,
1022                            retorno: retorno,
1023                            tipoVeiculo: tipoVeiculo,
1024                            endPonto1: endPonto1,
1025                            endPonto2: endPonto2
1026                        },
1027                        dataType: "html",
1028                        timeout: 15000,
1029                        success: function(retornoHtml) {
1030                            $('#divGif').html(retornoHtml);
1031
1032                            if (TENTAR_CALCULAR_NOVAMENTE && RETORNO_PRIMEIRO_PONTO) {
1033                                setTimeout(() => {
1034                                    const DISTANCIA_RETORNO = parseInt($(`#distanciaR`).val());
1035
1036                                    if (!DISTANCIA_RETORNO) {
1037                                        retryCalculate(p1, p2, RETORNO_PRIMEIRO_PONTO);
1038                                    }
1039                                }, 150);
1040                            }
1041
1042                            $('#btnCalcFreteCEN').attr('disabled', false);
1043                            resolve({ status: 'sucesso', data: retornoHtml });
1044                        },
1045                        error: function(jqXHR, textStatus, errorThrown) {
1046                            console.error("Erro na requisição:", errorThrown);
1047
1048                            if (textStatus === "timeout") {
1049                                console.warn("Tempo limite de 15 segundos excedido.");
1050                            }
1051
1052                            $('#btnCalcFreteCEN').attr('disabled', false);
1053                            $('#divGif').html('<div class="alert alert-warning">Erro ao calcular rota. Tente novamente.</div>');
1054                            resolve({ status: 'erro', msg: errorThrown }); // resolve mesmo em erro — não trava o Worker Pool
1055                        }
1056                    });
1057                }
1058
1059            } else {
1060                resolve({ status: 'pulado', msg: 'Coordenadas inválidas' });
1061            }
1062            //            document.getElementById('divJsonTeste').innerHTML += ' <br>p1= ' + p1;
1063            if ((p1 === 1) || (p1 === '1')) {
1064
1065                if (document.getElementById('configEnderecobase')) {
1066
1067                    if (document.getElementById('configEnderecobase').value == 'S') {
1068
1069                        calcularDistanciaEnderecoBase();
1070                    }
1071
1072                }
1073
1074                if (document.getElementById('distanciaClubeMotoboy')) {
1075                    /**
1076                     * clube do motoboy, tem que calcular a distancia do clube
1077                     * até o ponto 1
1078                     */
1079                    //                    document.getElementById('divJsonTeste').innerHTML += ' <br>calcular distancia até clube= ' + p1;
1080                    var tipoVeiculo = '';
1081                    if (document.getElementById('tipoVeiculo')) {
1082                        tipoVeiculo = document.getElementById('tipoVeiculo').value;
1083                    }
1084                    //                    alert('tipoVeiculo clube '+tipoVeiculo);
1085                    if (tipoVeiculo != 'DC') {
1086                        /**
1087                         * foi pedido chamado 2622
1088                         * retirar deslocamento do modulo cliente contrato delivery( contrato)
1089                         */
1090                        //                        alert(' calcula dist clube tipoVeiculo clube ' + tipoVeiculo);
1091                        calcularDistanciaClubeMotoboyPonto1();
1092                        $('#btnCalcFreteCEN').attr('disabled', false);
1093                    }
1094                }
1095                if (document.getElementById('distanciasantafacilidade')) {
1096                    /**
1097                     * clube do motoboy, tem que calcular a distancia do clube
1098                     * até o ponto 1
1099                     */
1100                    //                    document.getElementById('divJsonTeste').innerHTML += ' <br>calcular distancia até clube= ' + p1;
1101                    calcularDistanciaSantaFacilidadePonto1();
1102                    $('#btnCalcFreteCEN').attr('disabled', false);
1103                }
1104            }
1105        } else {
1106            //            alert(' la e lo vazio la p2 = '+$("#latitudeE" + p2).val()+ ' lap1 '+$("#latitudeE" + p1).val());
1107            console.log('ainda vazio latitude p1 ' + p1 + ' p2 ' + p2);
1108            resolve({ status: 'pulado', msg: 'Coordenadas vazias' });
1109        }
1110        }); // fim Promise
1111    }
1112
1113    async function calcularDistanciaRotaGoogle(p1, p2, retorno, time = 1000) {
1114
1115        if (($("#latitudeE" + p1).val() !== '') & ($("#latitudeE" + p2).val() !== '')) {
1116
1117            var inicio = $("#latitudeE" + p1).val() + "," + $("#longitudeE" + p1).val();
1118            var fim = $("#latitudeE" + p2).val() + "," + $("#longitudeE" + p2).val();
1119            var endPonto1 = $("#txtEnderecoE" + p1).val();
1120            var endPonto2 = $("#txtEnderecoE" + p2).val();
1121
1122            /**
1123             * calcular rota pelo ajax         
1124             */
1125            var tipoVeiculo = '';
1126            if (document.getElementById('tipoVeiculo')) {
1127                tipoVeiculo = document.getElementById('tipoVeiculo').value;
1128            }
1129
1130            var calculando = 'N';
1131            if (calculandoDistanciaPonto.indexOf(p2)) {
1132                console.log('index calculandoDistanciaPonto p2 ' + calculandoDistanciaPonto[p2] + ' p2= ' + p2);
1133                if (calculandoDistanciaPonto[p2] !== 'S') {
1134
1135                    calculandoDistanciaPonto[p2] = 'S';
1136                    console.log('vai calcular ' + p1 + ' p2 ' + p2);
1137
1138                    calculando = 'S';
1139                }
1140            }
1141            if (calculando === 'S') {
1142
1143                document.getElementById('divGif').innerHTML = '<img src="imagens/carregando.gif" /><br />Aguarde...';
1144
1145                console.log('inicio ' + inicio + ' fim ' + fim + ' p1' + p1 + ' p2 ' + p2 + ' retorno' + retorno + ' tipoVeiculo' + tipoVeiculo);
1146
1147                sleep(time).then(() => {
1148                    calcularDistanciaPeloGoogle(tipoVeiculo, inicio, fim, p1, p2, retorno);
1149                });
1150            }
1151            //            document.getElementById('divJsonTeste').innerHTML += ' <br>p1= ' + p1;
1152            if ((p1 === 1) || (p1 === '1')) {
1153
1154                if (document.getElementById('configEnderecobase')) {
1155
1156                    if (document.getElementById('configEnderecobase').value == 'S') {
1157
1158                        calcularDistanciaEnderecoBase();
1159                    }
1160
1161                }
1162
1163                if (document.getElementById('distanciaClubeMotoboy')) {
1164                    /**
1165                     * clube do motoboy, tem que calcular a distancia do clube
1166                     * até o ponto 1 
1167                     */
1168                    //                    document.getElementById('divJsonTeste').innerHTML += ' <br>calcular distancia até clube= ' + p1;
1169                    var tipoVeiculo = '';
1170                    if (document.getElementById('tipoVeiculo')) {
1171                        tipoVeiculo = document.getElementById('tipoVeiculo').value;
1172                    }
1173                    //                    alert('tipoVeiculo clube '+tipoVeiculo);
1174                    if (tipoVeiculo != 'DC') {
1175                        /**
1176                         * foi pedido chamado 2622
1177                         * retirar deslocamento do modulo cliente contrato delivery( contrato)
1178                         */
1179                        //                        alert(' calcula dist clube tipoVeiculo clube ' + tipoVeiculo);
1180                        calcularDistanciaClubeMotoboyPonto1();
1181                    }
1182                }
1183                if (document.getElementById('distanciasantafacilidade')) {
1184                    /**
1185                     * clube do motoboy, tem que calcular a distancia do clube
1186                     * até o ponto 1 
1187                     */
1188                    //                    document.getElementById('divJsonTeste').innerHTML += ' <br>calcular distancia até clube= ' + p1;
1189                    calcularDistanciaSantaFacilidadePonto1();
1190                }
1191            }
1192        } else {
1193            //            alert(' la e lo vazio la p2 = '+$("#latitudeE" + p2).val()+ ' lap1 '+$("#latitudeE" + p1).val());
1194            console.log('ainda vazio latitude p1 ' + p1 + ' p2 ' + p2);
1195
1196        }
1197    }
1198
1199    function calcularDistanciaEnderecoBase() {
1200
1201        $('#btnCalcFreteCEN').attr('disabled', true);
1202        let laP = $("#laEnderecoBase").val();
1203        let loP = $("#loEnderecoBase").val();
1204
1205        let laP1 = $("#latitudeE1").val();
1206        let loP2 = $("#longitudeE1").val();
1207
1208        let calculando = 'S';
1209
1210        if (validateLatLng(laP, loP) != true) {
1211            calculando = 'N';
1212        }
1213
1214        if (validateLatLng(laP1, loP2) != true) {
1215            calculando = 'N';
1216        }
1217
1218
1219        if (calculando == 'S') {
1220            if ((laP1 != '' && loP2 != '') && (laP != '' && loP != '')) {
1221
1222                let tipoVeiculo = 'M';
1223                if (document.getElementById('tipoVeiculo')) {
1224                    tipoVeiculo = document.getElementById('tipoVeiculo').value;
1225                }
1226
1227                document.getElementById('divGif').innerHTML = '<img src="imagens/carregando.gif" /><br />Aguarde...';
1228
1229                $.post("enderecosServico/enderecoAdicional/ajaxCalcularDistanciaEnderecoBase.php", {
1230                    laP: laP,
1231                    loP: loP,
1232                    laP1: laP1,
1233                    loP2: loP2,
1234                    tipoVeiculo: tipoVeiculo
1235                }, function(retorno) {
1236                    $('#divGif').html(retorno);
1237                    $('#btnCalcFreteCEN').attr('disabled', false);
1238                }, 'html');
1239            }
1240        }
1241
1242    }
1243
1244    function calcularDistanciaClubeMotoboyPonto1() {
1245        var p1 = 1;
1246        var p2 = 2;
1247        //        la e lo do clube -19.9425982,-43.9407188
1248        if (($("#latitudeE1" + p1).val() !== '') & ($("#latitudeE" + p2).val() !== '')) {
1249            var inicio = '-19.9425982,-43.9407188';
1250            var fim = $("#latitudeE" + p1).val() + "," + $("#longitudeE" + p1).val();
1251
1252            //  document.getElementById('divJsonTeste').innerHTML += ' <br>p1= ' + inicio+','+fim;
1253            /**
1254             * calcular rota pelo ajax         
1255             */
1256            var tipoVeiculo = 'M';
1257            if (document.getElementById('tipoVeiculo')) {
1258                tipoVeiculo = document.getElementById('tipoVeiculo').value;
1259            }
1260
1261            document.getElementById('divGif').innerHTML = '<img src="imagens/carregando.gif" /><br />Aguarde...';
1262
1263
1264            //            $.post("enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRota.php", {
1265            $.post("enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRotaClubeMotoboy.php", {
1266                    inicio: inicio,
1267                    fim: fim,
1268                    p1: p1,
1269                    p2: p2,
1270                    tipoVeiculo: tipoVeiculo
1271                },
1272                function(retorno) {
1273                    $('#divGif').html(retorno);
1274
1275                }, 'html');
1276        } else {
1277            //            alert(' la e lo vazio la p2 = '+$("#latitudeE" + p2).val()+ ' lap1 '+$("#latitudeE" + p1).val());
1278        }
1279    }
1280
1281    function calcularDistanciaSantaFacilidadePonto1() {
1282        var p1 = 1;
1283        var p2 = 2;
1284        //        la e lo do clube -19.9425982,-43.9407188
1285        if (($("#latitudeE1" + p1).val() !== '') & ($("#latitudeE" + p2).val() !== '')) {
1286            var inicio = '-27.5967526,-48.5579545';
1287            var fim = $("#latitudeE" + p1).val() + "," + $("#longitudeE" + p1).val();
1288
1289            //  document.getElementById('divJsonTeste').innerHTML += ' <br>p1= ' + inicio+','+fim;
1290            /**
1291             * calcular rota pelo ajax         
1292             */
1293            var tipoVeiculo = 'M';
1294            if (document.getElementById('tipoVeiculo')) {
1295                tipoVeiculo = document.getElementById('tipoVeiculo').value;
1296            }
1297
1298            document.getElementById('divGif').innerHTML = '<img src="imagens/carregando.gif" /><br />Aguarde...';
1299
1300
1301            //            $.post("enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRota.php", {
1302            $.post("enderecosServico/enderecoAdicional/ajaxCalculaDistanciaSantaFacilidade.php", {
1303                    inicio: inicio,
1304                    fim: fim,
1305                    p1: p1,
1306                    p2: p2,
1307                    tipoVeiculo: tipoVeiculo
1308                },
1309                function(retorno) {
1310                    $('#divGif').html(retorno);
1311
1312                }, 'html');
1313        } else {
1314            //            alert(' la e lo vazio la p2 = '+$("#latitudeE" + p2).val()+ ' lap1 '+$("#latitudeE" + p1).val());
1315        }
1316    }
1317
1318    function calcularDistanciaRotaTracandoRota(p1, p2, retorno) {
1319
1320        //function calcularDistanciaRotaTracandoRota(p1, p2, retorno,valorRadio='')
1321        var valorRadio = '';
1322        if (arguments.length > 3) {
1323            valorRadio = arguments[arguments.length - 1];
1324        }
1325
1326        if (($("#latitudeE" + p1).val() !== '') && ($("#latitudeE" + p2).val() !== '')) {
1327            if (tipoCalculoPonto == 'P1') {
1328                var inicio = $("#latitudeE1").val() + "," + $("#longitudeE1").val();
1329
1330                let p1Num = parseInt(p1);
1331                let p2Num = parseInt(p2);
1332
1333                if (p1Num > p2Num) {
1334                    var inicio = $("#latitudeE" + p1).val() + "," + $("#longitudeE" + p1).val();
1335                }
1336            } else {
1337                var inicio = $("#latitudeE" + p1).val() + "," + $("#longitudeE" + p1).val();
1338            }
1339
1340            var fim = $("#latitudeE" + p2).val() + "," + $("#longitudeE" + p2).val();
1341
1342            /**
1343             * calcular rota pelo ajax         
1344             */
1345            var tipoVeiculo = '';
1346            if (document.getElementById('tipoVeiculo')) {
1347                tipoVeiculo = document.getElementById('tipoVeiculo').value;
1348            }
1349
1350
1351            // document.getElementById('divJsonTeste').innerHTML += '<br> inicio= ' + inicio + ' fim = ' + fim;
1352
1353            apareceDiv('divGif');
1354            document.getElementById('divGif').innerHTML = '<img src="imagens/carregando.gif" /><br />Aguarde...';
1355
1356            /**
1357             * marcar radio
1358             */
1359            if (document.getElementsByName('categoriaSel')) {
1360
1361                var radios = document.getElementsByName("categoriaSel");
1362
1363                for (var i = 0; i < radios.length; i++) {
1364                    if (radios[i].value === valorRadio) {
1365                        radios[i].checked = true;
1366                    }
1367                }
1368            }
1369            //            $.post("enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRota.php", {
1370            $.post("enderecosServico/enderecoAdicional/ajaxCalculaDistanciaRotaJavascriptTracanDoRota.php", {
1371                    inicio: inicio,
1372                    fim: fim,
1373                    p1: p1,
1374                    p2: p2,
1375                    retorno: retorno,
1376                    tipoVeiculo: tipoVeiculo
1377                },
1378                function(retorno) {
1379                    $('#divGif').html(retorno);
1380
1381                }, 'html');
1382
1383            //            document.getElementById('divJsonTeste').innerHTML += ' <br>p1= ' + p1;
1384            if ((p1 === 1) || (p1 === '1')) {
1385                if (document.getElementById('distanciaClubeMotoboy')) {
1386                    /**
1387                     * clube do motoboy, tem que calcular a distancia do clube
1388                     * até o ponto 1 
1389                     */
1390                    //                    document.getElementById('divJsonTeste').innerHTML += ' <br>calcular distancia até clube= ' + p1;
1391
1392                    var tipoVeiculo = '';
1393                    if (document.getElementById('tipoVeiculo')) {
1394                        tipoVeiculo = document.getElementById('tipoVeiculo').value;
1395                    }
1396                    //                    alert('tipoVeiculo clube '+tipoVeiculo);
1397                    if (tipoVeiculo != 'DC') {
1398                        calcularDistanciaClubeMotoboyPonto1();
1399                    }
1400                }
1401            }
1402        } else {
1403            //            alert(' la e lo vazio la p2 = ' + $("#latitudeE" + p2).val() + ' lap1 ' + $("#latitudeE" + p1).val());
1404        }
1405    }
1406
1407    function fecharDivSolicServicoPainel() {
1408        if (document.getElementById('divGravarPedidoPainelNovo')) {
1409            document.getElementById('divGravarPedidoPainelNovo').innerHTML = '';
1410        }
1411    }
1412</script>
1412
1413
1414  <link rel="stylesheet" href="css/styleDoc.css?v=1790903925">
1415</head>
1416
1417<body>
1418  <style>
1419    .preloader {
1420      display: none;
1421    }
1422  </style>
1423
1424  <!-- Start Preloader Area -->
1425
1426<div class="preloader">
1427    <div class="preloader">
1428        <span></span>
1429        <span></span>
1430    </div>
1431</div>
1432<!-- End Preloader Area -->
1433
1434<!-- Start Navbar Area -->
1435<div class="navbar-area navbar-two">
1436    <div class="mapp-responsive-nav">
1437        <div class="container">
1438            <div class="mapp-responsive-menu">
1439                <div class="logo">
1440                    <a href="../">
1441                        <img src="../configClientesNovos/sites/dudus/logG.png?=v2" alt="logo">
1442                    </a>
1443                </div>
1444            </div>
1445        </div>
1446    </div>
1447
1448    <div class="mapp-nav">
1449        <div class="container">
1450            <nav class="navbar navbar-expand-md navbar-light">
1451                <a class="navbar-brand" href="../">
1452                    <img src="../configClientesNovos/sites/dudus/logG.png?=v2" alt="logo">
1453                </a>
1454                
1455            </nav>
1456        </div>
1457
1458    </div>
1459</div>
1460</div>
1461<!-- End Navbar Area -->
1462  <div class="row tituloDocumentacao">
1463    <div class="col-md-12 text-center" style="color: black;">
1464      <h3>Documentação Técnica</h3>
1465    </div>
1466  </div>
1467
1468  <div class="border-top">
1469    <div class="container-fluid">
1470      <div class="row paddingRow">
1471        <div class="col-md-3" id="menuNav">
1472          <div id="menuSuspenso"></div>
1473<div class="border rounded me-3 px-4 pt-3 corColuna menuSuspenso mb-3" id="menu">
1474    <div class="itemMenu mb-3" id="versao2" style="cursor: pointer;" onclick="documentacaoMostrar('V2');">Introdução</div>
1475    <div class="itemMenu mb-3" id="calcularServico" style="cursor: pointer;" onclick="documentacaoMostrar('CS');">API Calcular Serviço</div>
1476    <div class="itemMenu mb-3" id="solicitarNormal" style="cursor: pointer;" onclick="documentacaoMostrar('GS');">API Solicitar Serviço</div>
1477    <div class="itemMenu mb-3" id="listarVagasGestao" style="cursor: pointer;" onclick="documentacaoMostrar('LVG');">API Listar Vagas (Gestão de Vagas)</div>
1478    <div class="itemMenu mb-3" id="BairroCidadeRegiao" style="cursor: pointer;" onclick="abrirMenu('apiBairroCidadeRegiao');">API Bairro, Cidade e Região</div>
1479    <div id="apiBairroCidadeRegiao" style="display: none;">
1480        <div class="itemMenu mb-3" id="gravarServico" style="cursor: pointer;" onclick="subMenuSolicitar('subMenuListarServico')">- API Listar
1481            <div id="subMenuListarServico" style="display: none;">
1482                <div class="itemMenu subMenuItens" id="listarRegioesFixa" style="cursor: pointer;" onclick="documentacaoMostrar('LRF');">* Listar Regiões Com Valores Fixos</div>
1483                <div class="itemMenu subMenuItens" id="listarRegioesCoordenadas" style="cursor: pointer;" onclick="documentacaoMostrar('LRC');">* Listar Regiões Com Valores Por Coordenadas</div>
1484            </div>
1485        </div>
1486        <div class="itemMenu mb-3" id="gravarServico" style="cursor: pointer;" onclick="subMenuSolicitar('subMenuBairroCidadeRegiao')">- API Gravar Serviço
1487            <div id="subMenuBairroCidadeRegiao" style="display: none;">
1488                <div class="itemMenu subMenuItens" id="solicitarValoresFixo" style="cursor: pointer;" onclick="documentacaoMostrar('SVF');">* Solicitar Com Valores Fixos</div>
1489                <div class="itemMenu subMenuItens" id="solicitarCodigoRegiao" style="cursor: pointer;" onclick="documentacaoMostrar('SCR');">* Solicitar Com Código Da Região</div>
1490                <div class="itemMenu subMenuItens" id="solicitarCoordenadasRecebidas" style="cursor: pointer;" onclick="documentacaoMostrar('SCRE');">* Solicitar Com Coordenadas Recebidas</div>
1491            </div>
1492        </div>
1493    </div>
1494    <div class="itemMenu mb-3" id="buscarProfissionais" style="cursor: pointer;" onclick="documentacaoMostrar('bcpfs');">API Buscar profissionais</div>
1495    <div class="itemMenu mb-3" id="buscarProfissionalAtivo" style="cursor: pointer;" onclick="documentacaoMostrar('BPA');">API Busca Status Profissional</div>
1496    <div class="itemMenu mb-3" id="cancelarServico" style="cursor: pointer;" onclick="documentacaoMostrar('CanS');">API Cancelar Serviço</div>
1497    <div class="itemMenu mb-3" id="statusServico" style="cursor: pointer;" onclick="documentacaoMostrar('SS');">API Status Serviço</div>
1498    <div class="itemMenu mb-3" id="cadastrarServico" style="cursor: pointer;" onclick="documentacaoMostrar('CadS');">API Cadastrar Cliente</div>
1499    <div class="itemMenu mb-3" id="buscarCliente" style="cursor: pointer;" onclick="documentacaoMostrar('BC');">API Buscar Cliente</div>
1500    <div class="itemMenu mb-3" id="uploadServico" style="cursor: pointer;" onclick="documentacaoMostrar('UPSER');">API Upload Serviço</div>
1501    <div class="itemMenu mb-3" id="finalizarServico" style="cursor: pointer;" onclick="documentacaoMostrar('FS');">API Finalizar Serviço</div>
1502    <div class="itemMenu mb-3" id="saldoCreditoCliente" style="cursor: pointer;" onclick="documentacaoMostrar('SCC');">API Saldo Crédito Cliente </div>
1503    <div class="itemMenu mb-3" id="adicionarEndereco" style="cursor: pointer;" onclick="documentacaoMostrar('ADE');">API Adicionar Endereço </div>
1504    <div class="itemMenu mb-3" id="removerEndereco" style="cursor: pointer;" onclick="documentacaoMostrar('RE');">API Remover Endereço </div>
1505    <div class="itemMenu mb-3" id="incluuirEnderecosSistemaRotas" style="cursor: pointer;" onclick="documentacaoMostrar('ENDSIS');">API Endereços Sistema Rotas </div>
1506</div>
1507
1508<div id="menuLateral" style="display: none;" onclick="mostrarMenu()">
1509    <img src="./img/menu.png" alt="Menu Lateral">
1510</div>
1511
1512<div class="menuLateralNav px-3" id="menuLateralNav" style="display: none;">
1513    <div class="itemMenu mb-3 mt-4 top768px" id="versao2M" style="cursor: pointer;" onclick="documentacaoMostrar('V2');">Introdução</div>
1514    <div class="itemMenu mb-3" id="calcularServicoM" style="cursor: pointer;" onclick="documentacaoMostrar('CS');">API Calcular Serviço</div>
1515    <div class="itemMenu mb-3" id="solicitarNormalM" style="cursor: pointer;" onclick="documentacaoMostrar('GS');">API Solicitar Serviço</div>
1516    <div class="itemMenu mb-3" id="listarVagasGestaoM" style="cursor: pointer;" onclick="documentacaoMostrar('LVG');">API Listar Vagas (Gestão de Vagas)</div>
1517    <div class="itemMenu mb-3" id="BairroCidadeRegiaoM" style="cursor: pointer;" onclick="abrirMenu('apiBairroCidadeRegiaoM');">API Bairro, Cidade e Região</div>
1518    <div id="apiBairroCidadeRegiaoM" style="display: none;">
1519        <div class="itemMenu mb-3" id="gravarServicoM" style="cursor: pointer;" onclick="subMenuSolicitar('subMenuListarServicoM')">- API Listar
1520            <div id="subMenuListarServicoM" style="display: none;">
1521                <div class="itemMenu subMenuItens" id="listarRegioesFixaM" style="cursor: pointer;" onclick="documentacaoMostrar('LRF');">* Listar Regiões Com Valores Fixos</div>
1522                <div class="itemMenu subMenuItens" id="listarRegioesCoordenadasM" style="cursor: pointer;" onclick="documentacaoMostrar('LRC');">* Listar Regiões Com Valores Por Coordenadas</div>
1523            </div>
1524        </div>
1525        <div class="itemMenu mb-3" id="gravarServicoM" style="cursor: pointer;" onclick="subMenuSolicitar('subMenuBairroCidadeRegiaoM')">- API Gravar Serviço
1526            <div id="subMenuBairroCidadeRegiaoM" style="display: none;">
1527                <div class="itemMenu subMenuItens" id="solicitarValoresFixoM" style="cursor: pointer;" onclick="documentacaoMostrar('SVF');">* Solicitar Com Valores Fixos</div>
1528                <div class="itemMenu subMenuItens" id="solicitarCodigoRegiaoM" style="cursor: pointer;" onclick="documentacaoMostrar('SCR');">* Solicitar Com Código Da Região</div>
1529                <div class="itemMenu subMenuItens" id="solicitarCoordenadasRecebidasM" style="cursor: pointer;" onclick="documentacaoMostrar('SCRE');">* Solicitar Com Coordenadas Recebidas</div>
1530            </div>
1531        </div>
1532    </div>
1533    <div class="itemMenu mb-3" id="buscarProfissionaisM" style="cursor: pointer;" onclick="documentacaoMostrar('bcpfs');">Buscar profissionais</div>
1534    <div class="itemMenu mb-3" id="buscarProfissionalAtivoM" style="cursor: pointer;" onclick="documentacaoMostrar('BPA');">API Busca Status Profissional</div>
1535    <div class="itemMenu mb-3" id="cancelarServicoM" style="cursor: pointer;" onclick="documentacaoMostrar('CanS');">API Cancelar Serviço</div>
1536    <div class="itemMenu mb-3" id="statusServicoM" style="cursor: pointer;" onclick="documentacaoMostrar('SS');">API Status Serviço</div>
1537    <div class="itemMenu mb-3" id="cadastrarServicoM" style="cursor: pointer;" onclick="documentacaoMostrar('CadS');">API Cadastrar Cliente</div>
1538    <div class="itemMenu mb-3" id="buscarClienteM" style="cursor: pointer;" onclick="documentacaoMostrar('BC');">API Buscar Cliente</div>
1539    <div class="itemMenu mb-3" id="uploadServicoM" style="cursor: pointer;" onclick="documentacaoMostrar('UPSER');">API Upload Serviço</div>
1540    <div class="itemMenu mb-3" id="finalizarServicoM" style="cursor: pointer;" onclick="documentacaoMostrar('FS');">API Finalizar Serviço</div>
1541    <div class="itemMenu mb-3" id="saldoCreditoClienteM" style="cursor: pointer;" onclick="documentacaoMostrar('SCC');">API Saldo Crédito Cliente </div>
1542    <div class="itemMenu mb-3" id="adicionarEnderecoM" style="cursor: pointer;" onclick="documentacaoMostrar('ADE');">API Adicionar Endereço </div>
1543    <div class="itemMenu mb-3" id="removerEnderecoM" style="cursor: pointer;" onclick="documentacaoMostrar('RE');">API Remover Endereço </div>
1544    <div class="itemMenu mb-3" id="incluuirEnderecosSistemaRotasM" style="cursor: pointer;" onclick="documentacaoMostrar('ENDSIS');">API Endereços Sistema Rotas</div>
1545</div>        </div>
1546        <div class="col-md-9" id="conteudo">
1547
1548        </div>
1549      </div>
1550    </div>
1551  </div>
1552
1553
1554  <!-- 
1554<script type="text/javascript" src="js/main.js?v=50"></script>
1554 -->
1555  
1555<script type="text/javascript" src="js/scriptDoc.js?v=1790903925"></script>
1555
1556
1557  
1557<script>
1558    documentacaoMostrar('');
1559  </script>
vendor: 1 bytes, line 1559
1559
1560<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"92600bbe634746439afc5b6a4b76592a","r":1,"spa":2}' crossorigin="anonymous"></script>
1560
1561</body>
1562
1563</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.