Commit 337e0269 authored by Eric Seigne's avatar Eric Seigne
Browse files

preparation version 1.6.4

parent fbdc61ad
# 1.6.4
- récupération automatique des données de personnalisation lors de l'ouverture de session
- transfert des véhicules automatique en cas de changement de smartphone
- modification des véhicules possible
# 1.6.2
- possibilité d'adaptation de l'interface pour les revendeurs partenaires
......
......@@ -30,8 +30,10 @@
<ons-row>
<ons-col>
<hr />
<p>Pour plus de détails, consultez le site internet <a href="https://doliscan.fr">https://doliscan.fr</a></p>
<p>CAP-REL/DoliSCAN<br />https://cap-rel.fr<br />https://doliscan.fr</p>
<p>Pour plus de détails, consultez le site internet <a href="https://doliscan.fr">https://doliscan.fr</a> ou
<a onclick="gotoPage('changelog.html');">l'historique des modifications de l'application</a>
</p>
<p>DoliSCAN est développé par CAP-REL<br /><a href="https://doliscan.fr">doliscan.fr</a> || <a href="https://cap-rel.fr">cap-rel.fr</a></p>
</ons-col>
</ons-row>
......
<ons-page id="changelog">
<ons-toolbar modifier="material">
<div id="titreNav" class="center">
<span style="font-family: Penna,sans-serif;font-size: 200%;"> DoliSCAN </span>
<!-- <span style="font-weight:normal;">Nouveautés</span> -->
</div>
</ons-toolbar>
<div id=" container">
<div style="padding: 10px;">
<h2>Version 1.6.4 - Mars 2021</h2>
<p>Au menu de cette nouvelle version:
<ul>
<li>Indemnités kilométriques</li>
<li>Code postal ou nom de ville tout doit passer</li>
<li>Calcul automatique des distances</li>
<li>Gestion des parcours</li>
<li>Authentification via qrCode</li>
<li>Gestion des véhicules</li>
<li>Vous changez de smartphone ?</li>
<li>Quelques bugs corrigés</li>
</ul>
</p>
<p>Si vous n'avez pas le temps de tout lire vous pouvez directement vous rendre en bas de cette page :-)</p>
<h5>Indemnités Kilométriques</h5>
<p>Vous pouvez entrer un code postal ou le nom complet d'une ville. Pensez à cliquer sur le petit nuage bleu pour qu'il complète automatiquement votre saisie ou vous propose un choix en cas d'hésitation.</p>
<img style="max-width: 100%;" src="img/changes/1.6.4/ik-cp_ou_ville.png">
<b>Calcul automatique de distances:</b>
<p>L'assistant de calcul automatique de distance s'améliore. C'est encore le petit nuage bleu qu'il faut utiliser pour lancer le calcul de distance automatique entre deux villes.</p>
<b>Gestion des parcours:</b>
<p>La gestion des parcours complexe est maintenant opérationnelle, vous pouvez composer vos itinéraires avec autant d'étapes que vous voulez.</p>
<img style="max-width: 100%;" src="img/changes/1.6.4/ik-tournee.png">
<b>Retour au point de départ</b>
<p>Notez la présence du bouton "retour au point de départ" qui vous permet de créer automatiquement la dernière étape de votre tournée dans le cas d'un "retour à la base".</p>
<h5>Authentification via QRCode</h5>
<p>Flashez votre QRCode depuis la 1ere page d'authentification et l'application se configure automatiquement. C'est particulièrement pratique pour la première connexion et vous évite de devoir saisir votre identifiant et mot de passe. </p>
<p>Notez que votre QRCode est visible sur le site internet doliscan.fr (espace "mon compte").</p>
<h5>Gestion des véhicules</h5>
<p>La modification d'un véhicule est maintenant possible.</p>
<p>Vous pouvez également indiquer le numéro d'immatriculation de votre véhicule si vous le souhaitez ou que votre employeur vous le demande.</p>
<img style="max-width: 100%;" src="img/changes/1.6.4/vehicules.png">
<h5>Changement de smartphone</h5>
<p>Si vous changez de smartphone vous n'aurez pas à re-saisir la configuration de vos véhicules.</p>
<h5>Corrections de bugs</h5>
<p>Historique des frais : corrige un bug d'affichage en cas de retour sur la liste (cette liste était parfois vide et un passage par le menu principal était alors obligatoire).</p>
<p>
<ons-button onclick="hideChangelog('changelog')">Fermer</ons-button>
</p>
</div>
</div>
</ons-page>
......@@ -25,13 +25,6 @@
</ons-col>
</ons-row>
<ons-row>
<ons-col>
<h4>Dev</h4>
<ons-button modifier="material large" onclick="syncVehiculesWithServer();">SyncServer</ons-button>
</ons-col>
</ons-row>
<!-- <ons-row>
<ons-col>
<h4>Saisie automatique des villes</h4>
......
......@@ -63,10 +63,19 @@
function switchLoginOrMenu() {
myDebug("switchLoginOrMenu [" + switchLoginOrMenuNb + "] ... do nothing, wait for ohers ons.ready ...");
$('#loadingPage').fadeOut(1000);
setTimeout(function () {
realLoginOrMenu();
}, 1150);
switchLoginOrMenuNb++;
//On affiche le message de nouvelle version si l'utilisateur ne l'a pas déjà eu
let clv = localGetData("changeLogView");
if (clv == null || clv < globalAppVersion) {
myDebug("on affiche le changelog");
showChangelog();
}
else {
setTimeout(function () {
realLoginOrMenu();
}, 1150);
switchLoginOrMenuNb++;
}
}
function realLoginOrMenu() {
......@@ -87,6 +96,16 @@
// }
}
var showChangelog = function () {
gotoPage('changelog.html');
};
var hideChangelog = function (id) {
localStoreData("changeLogView", globalAppVersion);
//Et on repasse le cours normal des choses
switchLoginOrMenu();
};
ons.ready(function () {
myDebug("ONS ready in index.html");
screen.orientation.lock('portrait');
......
......@@ -21,7 +21,8 @@ let logoFileName=cordova.file.cacheDirectory+'custom.png';window.resolveLocalFil
function readFromFile(fileName,formdata,subject){var pathToFile=cordova.file.documentsDirectory+fileName;window.resolveLocalFileSystemURL(fileName,function(fileEntry){fileEntry.file(function(file){var reader=new FileReader();var fileSize=file.size;reader.onloadend=function(e){var fileContent=new Uint8Array(reader.result);formdata.append("afile",fileContent);formdata.append("afilesize",fileSize);var today=new Date();var destFilename=today.getFullYear().toString()+('0'+(today.getMonth()+1)).slice(-2)+('0'+today.getDate()).slice(-2)+"_"
+today.getHours().toString()+today.getMinutes().toString()+"-"+subject+"-"+basename(fileName);var newFileUri=cordova.file.documentsDirectory;moveFile(fileName,destFilename);endSendForm(formdata,destFilename);};reader.readAsArrayBuffer(file);},errorHandler.bind(null,fileName));},errorHandler.bind(null,fileName));}
function searchVille(leform,ville,slug){myDebug("searchVille : "+ville);let objForm=document.getElementById(leform);let d=$('#'+ville).val();let a="";showWait();$.ajaxSetup({timeout:5000,});result=undefined;if(ajaxDistance)
ajaxDistance.abort();var ajaxDistance=$.ajax({type:"GET",timeout:5000,url:"https://geo.doliscan.fr/api/geo/"+fixedEncodeURIComponent(d)+"/"+fixedEncodeURIComponent(a),beforeSend:function(xhr){xhr.setRequestHeader('Authorization','Bearer '+localGetData("api_token"));},xhrFields:{withCredentials:true},success:function(result){myDebug('searchVille ajax ok1 ::: '+JSON.stringify(result));myDebug(result);if(result!=undefined){hideWait();if(result.departsNb==1){functionChooseVille(encodeHTMLEntities(result.depart)+" ("+result.departCP+")",result.departSlug,ville,slug,true);}
ajaxDistance.abort();var ajaxDistance=$.ajax({type:"GET",timeout:5000,url:"https://geo.doliscan.fr/api/geo/"+fixedEncodeURIComponent(d)+"/"+fixedEncodeURIComponent(a),beforeSend:function(xhr){xhr.setRequestHeader('Authorization','Bearer '+localGetData("api_token"));},xhrFields:{withCredentials:true},success:function(result){myDebug('searchVille ajax ok1 ::: '+JSON.stringify(result));myDebug(result);if(result!=undefined){hideWait();if(result.departsNb==0){ons.notification.alert("Saisie manuelle nécessaire, cette ville n'est pas connue de nos serveurs",{title:"Erreur #1"});}
else if(result.departsNb==1){functionChooseVille(encodeHTMLEntities(result.depart)+" ("+result.departCP+")",result.departSlug,ville,slug,true);}
else{popupChoixVille(result,ville,slug);}}
else{hideWait();ons.notification.alert("Saisie manuelle nécessaire, cette ville n'est pas connue de nos serveurs",{title:"Erreur #1"});}},error:function(result){myDebug('searchVille ajax erreur'+result);hideWait();ons.notification.alert("Saisie manuelle nécessaire, cette ville n'est pas connue de nos serveurs",{title:"Erreur #2"});}});}
function popupChoixVille(result,ville,villeSlug){myDebug('popupChoixVille pour '+ville+" -- "+villeSlug);return new Promise((resolve,reject)=>{if(result.departsNb!==undefined){let btn=[];let btnNb=0;for(btnNb=0;btnNb<result.departsNb;btnNb++){btn.push({label:encodeHTMLEntities(result.depart[btnNb])+" ("+result.departCP[btnNb]+")",slug:result.departSlug[btnNb],ville:ville,villeSlug:villeSlug});}
......@@ -35,7 +36,8 @@ else{myDebug("functionChooseVille: slug is undef !")}}
function distanceAutomatiqueEtape(leform,etape,nb){let objForm=document.getElementById(leform);myDebug("distanceAutomatiqueEtape : "+nb);let a="null";let d="null";if(nb==1){d=objForm.elements['depart'].value;}
else{d=objForm.elements['etape'+(nb-1)].value;}
a=objForm.elements['etape'+nb].value;showWait();$.ajaxSetup({timeout:5000,});result=undefined;if(ajaxDistance)
ajaxDistance.abort();var ajaxDistance=$.ajax({type:"GET",timeout:5000,url:"https://geo.doliscan.fr/api/geo/"+fixedEncodeURIComponent(d)+"/"+fixedEncodeURIComponent(a),beforeSend:function(xhr){xhr.setRequestHeader('Authorization','Bearer '+localGetData("api_token"));},xhrFields:{withCredentials:true},success:function(result){myDebug('distanceAutomatiqueEtape ajax ok1 / '+nb+" ::: "+JSON.stringify(result));myDebug(result);if(result!=undefined){hideWait();if(result.arriveesNb==1){functionChooseVille(encodeHTMLEntities(result.arrivee)+" ("+result.arriveeCP+")",result.arriveeSlug,etape,etape+'Slug',true);if(result.distanceKM>0){updateDistanceEtapeFromServer(result,etape,nb);}
ajaxDistance.abort();var ajaxDistance=$.ajax({type:"GET",timeout:5000,url:"https://geo.doliscan.fr/api/geo/"+fixedEncodeURIComponent(d)+"/"+fixedEncodeURIComponent(a),beforeSend:function(xhr){xhr.setRequestHeader('Authorization','Bearer '+localGetData("api_token"));},xhrFields:{withCredentials:true},success:function(result){myDebug('distanceAutomatiqueEtape ajax ok1 / '+nb+" ::: "+JSON.stringify(result));myDebug(result);if(result!=undefined){hideWait();if(result.arriveesNb==0){ons.notification.alert("Saisie manuelle nécessaire, cette ville n'est pas connue de nos serveurs",{title:"Erreur #1a"});}
else if(result.arriveesNb==1){functionChooseVille(encodeHTMLEntities(result.arrivee)+" ("+result.arriveeCP+")",result.arriveeSlug,etape,etape+'Slug',true);if(result.distanceKM>0){updateDistanceEtapeFromServer(result,etape,nb);}
else{myDebug('distanceAutomatiqueEtape ajax aucune réponse disponible ');ons.notification.alert("Le calcul automatique de distance n'a rien trouvé.\n\nVeuillez saisir la distance manuellement.",{title:"Erreur #1a"});}}
else{popupChoixEtape(result,etape,nb);}}
else{hideWait();ons.notification.alert("Saisie manuelle nécessaire, cet itinéraire n'est pas connue sur nos serveurs",{title:"Erreur #1"});}},error:function(result){myDebug('distanceAutomatiqueEtape ajax erreur'+result);hideWait();ons.notification.alert("Saisie manuelle nécessaire, cet itinéraire n'est pas connue sur nos serveurs",{title:"Erreur #2"});}});}
......
......@@ -45,7 +45,10 @@ function searchVille(leform, ville, slug) {
myDebug(result);
if (result != undefined) {
hideWait();
if (result.departsNb == 1) {
if (result.departsNb == 0) {
ons.notification.alert("Saisie manuelle nécessaire, cette ville n'est pas connue de nos serveurs", { title: "Erreur #1" });
}
else if (result.departsNb == 1) {
functionChooseVille(encodeHTMLEntities(result.depart) + " (" + result.departCP + ")", result.departSlug, ville, slug, true);
// $('#' + ville).val(result.depart + ' (' + result.departCP + ')');
// $('#' + slug).val(result.departSlug);
......@@ -193,9 +196,11 @@ function distanceAutomatiqueEtape(leform, etape, nb) {
myDebug(result);
if (result != undefined) {
hideWait();
if (result.arriveesNb == 1) {
if (result.arriveesNb == 0) {
ons.notification.alert("Saisie manuelle nécessaire, cette ville n'est pas connue de nos serveurs", { title: "Erreur #1a" });
}
else if (result.arriveesNb == 1) {
functionChooseVille(encodeHTMLEntities(result.arrivee) + " (" + result.arriveeCP + ")", result.arriveeSlug, etape, etape + 'Slug', true);
if (result.distanceKM > 0) {
updateDistanceEtapeFromServer(result, etape, nb);
}
......
......@@ -20,11 +20,11 @@
<ons-list-item onclick="gotoPage('moncompte.html');" tappable modifier="nodivider">
Mon compte
</ons-list-item>
<ons-list-item onclick="gotoPage('apropos.html');" tappable modifier="nodivider">
À propos
</ons-list-item>
<ons-list-item onclick="closeSession();" tappable modifier="nodivider">
Fermer la session
</ons-list-item>
<ons-list-item onclick="gotoPage('apropos.html');" tappable modifier="nodivider" style="position:absolute;bottom:0;left:0;">
À propos
</ons-list-item>
</ons-list>
</ons-page>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment