Commit 35fe453f authored by Eric Seigne's avatar Eric Seigne
Browse files

Version 1.0.22

parent 6fa666ff
......@@ -14,6 +14,7 @@
Android/bin/
Android/gen/
Android/assets/
platforms/android
# generated files
bin/
......@@ -56,3 +57,6 @@ node_modules/
#plugins, ils sont reinstalles automatiquement par cordova prepare
plugins/*
.vscode
.gradle
# 1.0.22
- ajoute un test pour vérifier si un dolibarr auto hébergé existe vraiment et bascule sur doliscan.fr sinon
- mémorise le dernièer moyen de paiement utilisé pour le cocher par défaut lors de la prochaine opération
# 1.0.21
- corrige le bug #236 : au lancement de la version 1.0.19 ou 1.0.20 l'application boucle sur l'ajout de véhicule
......
<?xml version='1.0' encoding='utf-8'?>
<widget id="fr.caprel.doliscan" version="1.0.21" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="fr.caprel.doliscan" version="1.0.22" 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.
......@@ -59,7 +59,7 @@
<edit-config file="*-Info.plist" mode="merge" target="NSPhotoLibraryAddUsageDescription">
<string>Please pick a pictures of your invoice / receipt</string>
</edit-config>
<preference name="OverrideUserAgent" value="Mozilla/5.0 OpenNDF/1.0.21 Android" />
<preference name="OverrideUserAgent" value="Mozilla/5.0 OpenNDF/1.0.22 Android" />
<plugin name="cordova-plugin-inappbrowser" spec="^3.0.0" />
<plugin name="cordova-plugin-whitelist" spec="^1.3.4" />
</widget>
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="10021" android:versionName="1.0.21" package="fr.caprel.doliscan" xmlns:android="http://schemas.android.com/apk/res/android">
<manifest android:hardwareAccelerated="true" android:versionCode="10022" android:versionName="1.0.22" package="fr.caprel.doliscan" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true">
......
<?xml version='1.0' encoding='utf-8'?>
<widget id="fr.caprel.doliscan" version="1.0.21" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="fr.caprel.doliscan" version="1.0.22" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<feature name="AppVersion">
<param name="android-package" value="uk.co.whiteoctober.cordova.AppVersion" />
</feature>
......@@ -82,7 +82,7 @@
<icon density="xxhdpi" src="res/icon/android/icon-144-xxhdpi.png" />
<icon density="xxxhdpi" src="res/icon/android/icon-192-xxxhdpi.png" />
<preference name="loglevel" value="DEBUG" />
<preference name="OverrideUserAgent" value="Mozilla/5.0 OpenNDF/1.0.21 Android" />
<preference name="OverrideUserAgent" value="Mozilla/5.0 OpenNDF/1.0.22 Android" />
<preference name="AndroidLaunchMode" value="singleTop" />
<preference name="android-minSdkVersion" value="19" />
<preference name="android-targetSdkVersion" value="28" />
......
......@@ -74,7 +74,7 @@
$('#leformcompta').validate({
onsubmit: false,
success: "valid",
debug: true,
debug: false,
rules: {
compta_email: {
required: false,
......
......@@ -276,14 +276,15 @@
//On a rencontré des domaines avec des catchall ... donc il faut voir si l'application serveur est hébergée sur cette
//uri ou pas ... si oui on utilise ce serveur, si non on bascule sur doliscan.fr
var loginURL = "https://" + globalDoliScanDomain + "/";
// myDebug('loginJson : tentative de login via ajax request vers le serveur ' + localGetData("api_server"));
myDebug('DNSresolveSuccess : tentative de login via ajax request vers le serveur ' + localGetData("api_server"));
myDebug('Resolved ' + globalDoliScanDomain + ' to ' + address + 'now trying to find if doliscan app is available ...');
$.ajax({
type: "GET",
timeout: 5000,
url: loginURL,
success: function (result, textStatus, request) {
myDebug('success !');
// if (typeof result !== 'undefined') {
// myDebug('Resolved ' + globalDoliScanDomain + ' to ' + address);
localStoreData("api_server", "https://" + globalDoliScanDomain);
localStoreData("name_server", globalDoliScanDomain);
// }
......@@ -292,6 +293,7 @@
},
error: function (result) {
hideWait();
myDebug('error, fallback to doliscan.fr !');
localStoreData("api_server", "https://doliscan.fr");
localStoreData("name_server", "doliscan.fr");
}
......
......@@ -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 globalDevMode=false;var globalMyCamera;var globalpictureSource;var globaldestinationType;var globalNetworkResponse=Date.now();var globalCurrentPage="";var globalCurrentTitle="";var globalDB=null;var globalTenMinuts=60*10*1000;var globalCompatibleWithAPIVersion=4;var globalDoliScanDomain="";var globalLastInsertId="";var globalSyncInProgress=false;var globalAppVersion="1.0.21";var dataLDF="";var globalResumable;var globalProgressBar;var globalTypeFrais="";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'];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)+"_"
var globalDevMode=false;var globalMyCamera;var globalpictureSource;var globaldestinationType;var globalNetworkResponse=Date.now();var globalCurrentPage="";var globalCurrentTitle="";var globalDB=null;var globalTenMinuts=60*10*1000;var globalCompatibleWithAPIVersion=4;var globalDoliScanDomain="";var globalLastInsertId="";var globalSyncInProgress=false;var globalAppVersion="1.0.22";var dataLDF="";var globalResumable;var globalProgressBar;var globalTypeFrais="";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'];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 distanceAutomatique(depart,arrivee){showWait();$.ajaxSetup({timeout:5000,});$.ajax({type:"GET",timeout:5000,url:"https://geo.doliscan.fr/api/geo/"+depart+"/"+arrivee,beforeSend:function(xhr){xhr.setRequestHeader('Authorization','Bearer '+localGetData("api_token"));},success:function(result){if(result!='undefined'){hideWait();updateDistanceFromServer(result);}
else{hideWait();ons.notification.alert("Saisie manuelle nécessaire, cette distance n'est pas connue sur nos serveurs",{title:"Erreur"});}},error:function(result){hideWait();ons.notification.alert("Saisie manuelle nécessaire, cette distance n'est pas connue sur nos serveurs",{title:"Erreur"});}});}
......@@ -21,6 +21,7 @@ $(formField).append(htmlFTS);},function(){});});}
return htmlFTS;}
function feedDoliscanInfos(){if($("#feedDoliscanInfos")){$("#feedDoliscanInfos").empty();let html="<ons-list>";html+="<ons-list-item>Compte "+localGetData("email")+"</ons-list-item>";html+="<ons-list-item>Serveur "+localGetData("name_server")+"</ons-list-item>";html+="<ons-list-item>Version "+globalAppVersion+"</ons-list-item>";html+="</ons-list>";$("#feedDoliscanInfos").append(html);}}
function sendForm(){myDebug("sendForm ");showWait();$.ajaxSetup({timeout:10000,headers:{'X-CSRF-TOKEN':localGetData("api_token")}});if(document.getElementById('ladate')){myDebug("on a ladate : "+document.getElementById('ladate').value);localStoreData("ladate",document.getElementById('ladate').value);}
if(document.getElementById('moyenPaiement')){myDebug("on a moyenPaiement : "+document.getElementById('moyenPaiement').value);localStoreData("moyenPaiement",document.getElementById('moyenPaiement').value);}
var formdata=new FormData($("#leform")[0]);formdata.append('_token',localGetData("api_token"));if(document.getElementById('updateID').value==0){var hasImage=document.getElementById('smallImage');if(hasImage!=null){var file=document.getElementById('smallImage').getAttribute("src");if(file!=""){let typeFraisObj=document.getElementById('leform').typeFrais;globalTypeFrais="autre";if(typeFraisObj!=null){globalTypeFrais=typeFraisObj.value;}
endSendForm(formdata,file);}
else{myDebug('Image introuvable ...');ons.notification.alert("Photo du justificatif introuvable !",{title:"Attention"});hideWait();}}
......@@ -42,7 +43,8 @@ for(let i=0;i<fieldsToValidate.length;i++){field=fieldsToValidate[i];if(document
else{$('#'+field).attr('style',"");}}}
if(probleme!=""){ons.notification.alert("Certaines informations sont manquantes:<ul> "+probleme+"</ul>",{title:"Attention"});return false;}
else{return true;}}
function initialiseForm(){if(document.getElementById('feedPaiements')){$('#feedPaiements').load('parts/paiement.html',function(){$('#feedPaiements').trigger("create");if(dataLDF!=""){if(dataLDF['moyenPaiement']){myDebug("Choix du moyen de paiement");$('#moyenPaiement-'+dataLDF['moyenPaiement']).click();myDebug("On a cliqué");}}});}
function initialiseForm(){if(document.getElementById('feedPaiements')){$('#feedPaiements').load('parts/paiement.html',function(){$('#feedPaiements').trigger("create");if(dataLDF!=""){if(dataLDF['moyenPaiement']){myDebug("Choix du moyen de paiement");$('#moyenPaiement-'+dataLDF['moyenPaiement']).click();myDebug("On a cliqué");}}
else{if(localGetData('moyenPaiement')){$('#'+localGetData('moyenPaiement')).click();}}});}
if(document.getElementById('ladate')){let today=new Date();$('#ladate').val(today.toDateInputValue());}
if(document.getElementById('feedVehiculesPerso')){$("#feedVehiculesPerso").append(feedVehicules("vehicules"));}
if(document.getElementById('feedVehiculesPro')){$("#feedVehiculesPro").append(feedVehicules("vehiculesPro"));}
......@@ -59,7 +61,7 @@ function uploadErrorSaveFile(filename){if(globalSyncInProgress==false){var today
var app={initialize:function(){document.addEventListener('deviceready',this.onDeviceReady.bind(this),false);},onDeviceReady:function(){document.addEventListener("backKeyDown",function(){fn.back();},false);this.receivedEvent('deviceready');},receivedEvent:function(id){var parentElement=document.getElementById(id);if(parentElement!=null){var listeningElement=parentElement.querySelector('.listening');var receivedElement=parentElement.querySelector('.received');listeningElement.setAttribute('style','display:none;');receivedElement.setAttribute('style','display:block;');}}};app.initialize();Date.prototype.toDateInputValue=(function(){var local=new Date(this);local.setMinutes(this.getMinutes()-this.getTimezoneOffset());return local.toJSON().slice(0,10);});function updateLocalUserFromServerSuccessMessage(code){ons.notification.alert('Données sauvegardées, vous pouvez revenir au menu principal...',{title:"Succès"});}
function updateLocalUserFromServerSuccess(resultBool){if(resultBool){window.location.assign("app.html");}
else{window.location.assign("index.html");}}
function updateLocalUserFromServer(result,callback){myDebug("======================================================== updateLocalUserFromServer");let ret=false;if((typeof result!=='undefined')&&(result!=null)&&(result!="")){for(let key of globalSrvKeys){console.log("On cherche "+key);if((typeof result.data!=='undefined')&&(result.data!=null)&&(result.data!="")){if((typeof result.data[key]!=='undefined')&&(result.data[key]!=null)&&(result.data[key]!="")){localStoreData(key,result.data[key]);ret=true;}}
function updateLocalUserFromServer(result,callback){myDebug("======================================================== updateLocalUserFromServer");let ret=false;if((typeof result!=='undefined')&&(result!=null)&&(result!="")){for(let key of globalSrvKeys){myDebug("On cherche "+key);if((typeof result.data!=='undefined')&&(result.data!=null)&&(result.data!="")){if((typeof result.data[key]!=='undefined')&&(result.data[key]!=null)&&(result.data[key]!="")){localStoreData(key,result.data[key]);ret=true;}}
else{if((typeof result[key]!=='undefined')&&(result[key]!=null)&&(result[key]!="")){localStoreData(key,result[key]);ret=true;}}}}
callback(ret);}
function updateServerUserFromLocal(){var data={};for(let key of globalSrvKeys){let value=localGetData(key);if(value!=null){data[key]=value;}}
......
......@@ -17,7 +17,7 @@ var globalLastInsertId = ""; // Avant d'envoyer les données au serve
var globalSyncInProgress = false; // Pour savoir si on est en phase de synchronisation ou pas (gestion différente du "formulaire" d'upload)
// **********************************************************************
//Ne pas toucher, mis à jour automatiquement à partir du config.xml
var globalAppVersion = "1.0.21"; // mis à jour automatiquement à partir du fichier config.xml lors du build android
var globalAppVersion = "1.0.22"; // mis à jour automatiquement à partir du fichier config.xml lors du build android
// **********************************************************************
var dataLDF = "";
var globalResumable;
......@@ -27,4 +27,3 @@ var globalTypeFrais = "";
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'];
......@@ -139,3 +139,4 @@ function feedDoliscanInfos() {
$("#feedDoliscanInfos").append(html);
}
}
......@@ -21,6 +21,11 @@ function sendForm() {
myDebug("on a ladate : " + document.getElementById('ladate').value);
localStoreData("ladate", document.getElementById('ladate').value);
}
//On sauvegarde le moyen de paiement pour le proposer par défaut au prochain scan
if (document.getElementById('moyenPaiement')) {
myDebug("on a moyenPaiement : " + document.getElementById('moyenPaiement').value);
localStoreData("moyenPaiement", document.getElementById('moyenPaiement').value);
}
var formdata = new FormData($("#leform")[0]);
// myDebug("formdata tout neuf");
......@@ -322,6 +327,13 @@ function initialiseForm() {
myDebug("On a cliqué");
}
}
else {
//on essaye de lui attribuer par défaut le moyen de paiement sauvegardé
//localStoreData("moyenPaiement", document.getElementById('moyenPaiement').value);
if (localGetData('moyenPaiement')) {
$('#' + localGetData('moyenPaiement')).click();
}
}
});
}
......@@ -334,6 +346,7 @@ function initialiseForm() {
// myDebug("Résultat de l'affectation : " + document.getElementById('ladate').value);
}
if (document.getElementById('feedVehiculesPerso')) {
// myDebug('Depuis initialiseForm, appel feedVehicules ...');
$("#feedVehiculesPerso").append(feedVehicules("vehicules"));
......
......@@ -26,7 +26,7 @@ function updateLocalUserFromServer(result, callback) {
// myDebug(JSON.stringify(result));
if ((typeof result !== 'undefined') && (result != null) && (result != "")) {
for (let key of globalSrvKeys) {
console.log("On cherche " + key);
myDebug("On cherche " + key);
if ((typeof result.data !== 'undefined') && (result.data != null) && (result.data != "")) {
// myDebug('updateLocalUserFromServer typeOf : ' + (typeof result.data));
// myDebug("on essaye : " + key + " -> " + result.data[key]);
......
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