Commit 28b5706c authored by Eric Seigne's avatar Eric Seigne
Browse files

version 1.9.4

parent 681fc3ff
# 1.9.3
- retour d'une fonctionnalité perdue de la version 1.9.2 : la possibilité de modifier
la date des indemnités kilométriques
# 1.9.4
- retour d'une fonctionnalité perdue de la version 1.9.2 : la possibilité de modifier la date des indemnités kilométriques
- optimisation technique (évite de tenter le chargement de la css custom à chaque changement de page si ça n'a pas marché après l'ouverture de session)
-
# 1.9.2
- nouveau module de gestion des IK pour simplifier la saisie des itinéraires
......
<?xml version='1.0' encoding='utf-8'?>
<widget id="fr.caprel.doliscan" version="1.9.3" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="fr.caprel.doliscan" version="1.9.4" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>doliscan</name>
<description>DoliSCAN is a tiny app for french people looking for a free and self hosting "notes de frais/expenses report" solution.</description>
<author email="eric.seigne@cap-rel.fr" href="https://cap-rel.fr">Eric Seigne</author>
......@@ -122,5 +122,5 @@
<param name="ios-package" value="Calendar" />
</feature>
</platform>
<preference name="OverrideUserAgent" value="Mozilla/5.0 OpenNDF/1.9.3 Android" />
<preference name="OverrideUserAgent" value="Mozilla/5.0 OpenNDF/1.9.4 Android" />
</widget>
......@@ -2,7 +2,7 @@
* (c) Éric Seigne <eric.seigne@cap-rel.fr> - 2019-2020 - GNU AGPLv3
* full source code in src/ subfolder, this file is minifyed
*/
var globalAppVersion="1.9.3";var globalDevMode=false;var globalMyCamera;var globalpictureSource;var globaldestinationType;var globalNetworkResponse=Date.now();var globalCurrentPage="";var globalCurrentTitle="";var globalTenMinuts=60*10*1000;var globalCompatibleWithAPIVersion=4;var globalDoliScanDomain="";var globalLastInsertId="";var globalSyncInProgress=false;var globalPictureFileName="";var globalPicturesAvailable=[];var globalSyncObject=[];var globalIkToReuse=undefined;var globalCustomCSS=true;var dataLDF="";var dataIK="";var globalMyNavigator=undefined;var globalResumable=undefined;var globalProgressBar=undefined;var globalTypeFrais="";var globalVehiculeEd=undefined;var loginAPIKeyErrorInProgress=false;var globalSrvKeys=['email','api_token','firstname','name','adresse','cp','ville','pays','send_copy_to','compta_email','compta_ik','compta_peage','compta_hotel','compta_train','compta_carburant','compta_taxi','compta_restauration','compta_divers','compta_compteperso','compta_tvadeductible','official_app_version','official_app_message','mode_simple','compta_tva_tx1','compta_tva_tx2','compta_tva_tx3','compta_tva_tx4'];function errorHandlerCustomFile(title,message){myDebug('errorHandlerCustomFile : '+title+' -- message follow:');myDebug(message);globalCustomCSS=false;}
var globalAppVersion="1.9.4";var globalDevMode=false;var globalMyCamera;var globalpictureSource;var globaldestinationType;var globalNetworkResponse=Date.now();var globalCurrentPage="";var globalCurrentTitle="";var globalTenMinuts=60*10*1000;var globalCompatibleWithAPIVersion=4;var globalDoliScanDomain="";var globalLastInsertId="";var globalSyncInProgress=false;var globalPictureFileName="";var globalPicturesAvailable=[];var globalSyncObject=[];var globalIkToReuse=undefined;var globalCustomCSS=true;var dataLDF="";var dataIK="";var globalMyNavigator=undefined;var globalResumable=undefined;var globalProgressBar=undefined;var globalTypeFrais="";var globalVehiculeEd=undefined;var loginAPIKeyErrorInProgress=false;var globalSrvKeys=['email','api_token','firstname','name','adresse','cp','ville','pays','send_copy_to','compta_email','compta_ik','compta_peage','compta_hotel','compta_train','compta_carburant','compta_taxi','compta_restauration','compta_divers','compta_compteperso','compta_tvadeductible','official_app_version','official_app_message','mode_simple','compta_tva_tx1','compta_tva_tx2','compta_tva_tx3','compta_tva_tx4'];function errorHandlerCustomFile(title,message){myDebug('errorHandlerCustomFile : '+title+' -- message follow:');myDebug(message);globalCustomCSS=false;}
function loadCustomCSS(){if((typeof cordova=='undefined')||(cordova===null)||(cordova=="")){return;}
if((typeof cordova.file=='undefined')||(cordova.file===null)||(cordova.file=="")){return;}
if((typeof cordova.file.cacheDirectory=='undefined')||(cordova.file.cacheDirectory===null)||(cordova.file.cacheDirectory=="")){return;}
......@@ -19,11 +19,9 @@ if((typeof cordova.file=='undefined')||(cordova.file===null)||(cordova.file=="")
if((typeof cordova.file.cacheDirectory=='undefined')||(cordova.file.cacheDirectory===null)||(cordova.file.cacheDirectory=="")){return;}
let logoFileName=cordova.file.cacheDirectory+'custom.png';window.resolveLocalFileSystemURL(logoFileName,function(fileEntry){fileEntry.file(function(file){var reader=new FileReader();var fileSize=file.size;reader.onloadend=function(){var blob=new Blob([new Uint8Array(this.result)],{type:"image/png"});$("#homeLogo").attr("src",window.URL.createObjectURL(blob));};reader.readAsArrayBuffer(file);},errorHandlerCustomFile.bind(null,logoFileName));},errorHandlerCustomFile.bind(null,logoFileName));}
function removeCustomFiles(){deleteFile(cordova.file.cacheDirectory,'custom.png');deleteFile(cordova.file.cacheDirectory,'custom.css');localStoreData("customAbout","");globalCustomCSS=false;}
var globalDB=null;var databaseEngine='IndexedDB';var databaseName='doliscanDB';var databaseVersion=8;var globalIndexedDB=null;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,uid,callbackfunction=null,callbackargs=null){myDebug("searchVille : "+ville+" slug="+slug+" uid="+uid);let objForm=document.getElementById(leform);let d=$('#'+ville).val();showWait();$.ajaxSetup({timeout:10000,headers:{'X-CSRF-TOKEN':localGetData("api_token")}});result=undefined;if(ajaxDistance)
ajaxDistance.abort();let ajaxURL=localGetData("api_server")+"/api/geo/"+fixedEncodeURIComponent(d);var ajaxDistance=$.ajax({type:"GET",timeout:15000,url:ajaxURL,beforeSend:function(xhr){xhr.setRequestHeader('Authorization','Bearer '+localGetData("api_token"));},xhrFields:{withCredentials:true},success:function(result){myDebug('searchVille ajax ok1 ::: '+JSON.stringify(result));if(result!=undefined&&Array.isArray(result)){hideWait();if(result.length<=0){ons.notification.alert("Saisie manuelle nécessaire, cette ville n'est pas connue de nos serveurs",{title:"Erreur #1"});}
else if(result.length==1){myDebug('searchVille une seule réponse, on applique le contenu');functionChooseVille(encodeHTMLEntities(result[0].name)+" ("+result[0].zip_code+")",result[0].slug,result[0].id,ville,slug,uid,true,callbackfunction,callbackargs);}
var globalDB=null;var databaseEngine='IndexedDB';var databaseName='doliscanDB';var databaseVersion=8;var globalIndexedDB=null;function searchVille(leform,ville,slug,uid,callbackfunction=null,callbackargs=null){myDebug("searchVille : "+ville+" slug="+slug+" uid="+uid);let objForm=document.getElementById(leform);let d=$('#'+ville).val();showWait();$.ajaxSetup({timeout:10000,headers:{'X-CSRF-TOKEN':localGetData("api_token")}});result=undefined;if(ajaxDistance)
ajaxDistance.abort();let ajaxURL=localGetData("api_server")+"/api/geo/"+fixedEncodeURIComponent(d);var ajaxDistance=$.ajax({type:"GET",timeout:15000,url:ajaxURL,beforeSend:function(xhr){xhr.setRequestHeader('Authorization','Bearer '+localGetData("api_token"));},xhrFields:{withCredentials:true},success:function(result){if(result!=undefined&&Array.isArray(result)){hideWait();if(result.length<=0){ons.notification.alert("Saisie manuelle nécessaire, cette ville n'est pas connue de nos serveurs",{title:"Erreur #1"});}
else if(result.length==1){functionChooseVille(encodeHTMLEntities(result[0].name)+" ("+result[0].zip_code+")",result[0].slug,result[0].id,ville,slug,uid,true,callbackfunction,callbackargs);}
else{popupChoixVille(result,ville,slug,uid,callbackfunction,callbackargs);}}
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,fieldVille,fieldVilleSlug,fieldVilleUID,callbackfunction=null,callbackargs=null){myDebug('popupChoixVille pour '+fieldVille+" -- "+fieldVilleSlug);return new Promise((resolve,reject)=>{if(result.length>0){let btn=[];let btnNb=0;for(btnNb=0;btnNb<result.length;btnNb++){btn.push({label:encodeHTMLEntities(result[btnNb].name)+" ("+result[btnNb].zip_code+")",slug:result[btnNb].slug,uid:result[btnNb].id,ville:fieldVille,villeSlug:fieldVilleSlug,villeUID:fieldVilleUID,callbackfunction:callbackfunction,callbackargs:callbackargs});}
......@@ -309,7 +307,7 @@ else{console.log("pas de champ date sur cette page ...");}}
function feedObjets(objets){if((typeof objets!='undefined')&&(objets!==null)&&(objets!="")){for(var i=0;i<objets.length&&i<15;i++){$('#listeObjets').append('<div class=\"expandable-content list-item__expandable-content\"><a href="#" onclick="selectLabel(\''+objets[i]+'\');">'+objets[i]+'</a></div>');}}}
function selectLabel(objet){if((typeof objet!='undefined')&&(objet!==null)&&(objet!="")){$('#listeObjets').hide();$('#label').val(objet);$('#label').focus();document.querySelector('#listeObjets').hideExpansion();$('#listeObjets').show();}}
function setPageTitle(titre){myDebug("setPageTitle : "+titre);globalCurrentTitle=titre;$('#titreDoliScan').replaceWith('<div id="titreDoliScan" class="left" onclick="fn.back();"><i class="zmdi chevron-circle-left"></i> '+titre+'</div>');}
function completePageIKAfterGoto(dataIK){myDebug("completePageIKAfterGoto : "+JSON.stringify(dataIK));let date=new Date(decodeURIComponent(dataIK.ladate));$('#ladate').val(date.toDateInputValue());$('#label').val(decodeURIComponent(dataIK.label));$('#depart').val(decodeURIComponent(dataIK.depart));ikAjoutEtape('leformIK');$('#etape1').val(decodeURIComponent(dataIK.arrivee));searchVille('leformIK','depart','departSlug','departUID');var checksearchVille=setInterval(function(){if($('#departSlug').length){clearInterval(checksearchVille);myDebug("departSlug exists, call distanceAutomatiqueEtape");distanceAutomatiqueEtape('leformIK','etape1',1);}},1000);var checksearchEtape=setInterval(function(){if($('#etape1Distance').length){clearInterval(checksearchEtape);myDebug("etape1Distance exists, call ikRetourDepart");ikRetourDepart('leformIK');}},1000);dataIK="";}
function completePageIKAfterGoto(dataIK){myDebug("completePageIKAfterGoto : "+JSON.stringify(dataIK));let date=new Date(decodeURIComponent(dataIK.ladate));$('#ladate').val(date.toDateInputValue());$('#label').val(decodeURIComponent(dataIK.label));$('#depart').val(decodeURIComponent(dataIK.depart));ikAjoutEtape('leformIK');$('#etape1').val(decodeURIComponent(dataIK.arrivee));searchVille('leformIK','depart','departSlug','departUID');var checksearchVille=setInterval(function(){if($('#departSlug').length){clearInterval(checksearchVille);myDebug("departSlug exists, call distanceAutomatiqueEtape");distanceAutomatiqueEtape('leformIK','etape1',1);}},1000);dataIK="";}
function completePageAfterGoto(dataLDF){myDebug("completePageAfterGoto ... : "+JSON.stringify(dataLDF));document.getElementById("updateID").value=dataLDF['sid'];document.getElementById("photoFacturette").value="UPDATE";let fieldsToValidate=['nom','arrivee','depart','distance','label','ladate','ttc','typeFrais','moyenPaiement','photoFacturette'];for(let i=0;i<fieldsToValidate.length;i++){let field=fieldsToValidate[i];switch(field){case 'photoFacturette':$("#smallImage").attr("src",dataLDF[field]);break;case 'moyenPaiement':break;default:if(document.getElementById(field)){document.getElementById(field).value=dataLDF[field];}}}
for(let i=1;i<5;i++){let fieldNameTx='tvaTx'+i;let fieldNameVal='tvaVal'+i;if(document.getElementById(fieldNameVal)){myDebug("On essaye de completer la TVA de "+fieldNameVal+" locale "+$("#"+fieldNameTx).val()+" par ce qu'on a du serveur "+dataLDF[fieldNameTx]+" val = "+dataLDF[fieldNameVal]);document.getElementById(fieldNameVal).value=dataLDF[fieldNameVal];}}}
ons.ready(function(){myDebug("ONS Ready, ready in ndf.js");$('#label').keyup(function(){$('#listeObjets').show();});let onsRightMenu=document.getElementById('rightmenu');if(onsRightMenu!=undefined){onsRightMenu.load("parts/splitter.html");onsRightMenu.close();}
......@@ -379,8 +377,8 @@ if(lapage=='ONSFraisPeage'){objets=JSON.parse(localGetData("objetsPeageParking")
if(lapage=='ONSFraisRestauration'){objets=JSON.parse(localGetData("objetsResto"));}
if(lapage=='ONSFraisTaxi'){objets=JSON.parse(localGetData("objetsTaxi"));}
if(lapage=='ONSFraisTrain'){objets=JSON.parse(localGetData("objetsTrain"));}
globalPictureFileName="";myDebug("reset de globalPictureFileName ...");feedObjets(objets);initialiseForm();if(dataLDF!=""){completePageAfterGoto(dataLDF);}
if(dataIK!=""){completePageIKAfterGoto(dataIK);}
globalPictureFileName="";myDebug("reset de globalPictureFileName ...");feedObjets(objets);initialiseForm();if(dataLDF!=""){if(lapage=='ONSFraisIK'){completePageIKAfterGoto(dataLDF);}
else{if(lapage.startsWith('ONSFrais')){completePageAfterGoto(dataLDF);}}}
let el=document.querySelector('#contenuLDFImage');if(el!==null){myDebug("Contenu LDF Image : "+el);let pz=new PinchZoom(el,{});}},false);function myDebug(msg){if(globalDevMode){if("object"==typeof msg){console.log('NDFDEBUG : '+JSON.stringify(msg));}
else{console.log('NDFDEBUG : '+msg);}}}
function dateFormatDDMMYYYY(ladate){let formattedDate=new Date(ladate);let d=formattedDate.getDate();let m=formattedDate.getMonth();m+=1;let y=formattedDate.getFullYear();return(d+"/"+m+"/"+y);}
......
......@@ -3,7 +3,7 @@
*/
// **********************************************************************
//Ne pas toucher, mis à jour automatiquement à partir du config.xml
var globalAppVersion = "1.9.3"; // mis à jour automatiquement à partir du fichier config.xml lors du build android
var globalAppVersion = "1.9.4"; // mis à jour automatiquement à partir du fichier config.xml lors du build android
// **********************************************************************
......
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