Commit 634e80df authored by Eric Seigne's avatar Eric Seigne
Browse files

version 1.0.19 : ajoute un liseret rouge autour des champs à compléter, retour...

version 1.0.19 : ajoute un liseret rouge autour des champs à compléter, retour du bouton valider en bas de chaque formulaire de saisie
parent ff1a3a41
<?xml version='1.0' encoding='utf-8'?>
<widget id="fr.caprel.doliscan" version="1.0.18" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="fr.caprel.doliscan" version="1.0.19" 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.17 Android" />
<preference name="OverrideUserAgent" value="Mozilla/5.0 OpenNDF/1.0.19 Android" />
<plugin name="cordova-plugin-inappbrowser" spec="^3.0.0" />
<plugin name="cordova-plugin-whitelist" spec="^1.3.4" />
</widget>
......@@ -31,7 +31,7 @@
</ons-list-item>
</ons-list> -->
<!-- <ons-button modifier="material large" onclick="checkForm();">Ajouter</ons-button> -->
<ons-button modifier="material large" onclick="checkForm();">Valider</ons-button>
</div>
</div>
......
......@@ -53,7 +53,7 @@
</ons-list-item>
</ons-list>
<!-- <ons-button modifier="material large" onclick="checkForm();">Ajouter</ons-button> -->
<ons-button modifier="material large" onclick="checkForm();">Valider</ons-button>
</div>
</div>
......
......@@ -33,7 +33,7 @@
</ons-list-item>
</ons-list>
<!-- <ons-button modifier="material large" onclick="checkForm();">Ajouter</ons-button> -->
<ons-button modifier="material large" onclick="checkForm();">Valider</ons-button>
</div>
</div>
......
......@@ -37,7 +37,7 @@
</ons-list-item>
</ons-list>
<!-- <ons-button modifier="material large" onclick="checkForm();">Ajouter</ons-button> -->
<ons-button modifier="material large" onclick="checkForm();">Valider</ons-button>
</div>
</div>
......
......@@ -35,7 +35,7 @@
</ons-list-item>
</ons-list>
<!-- <ons-button modifier="material large" onclick="checkForm();">Ajouter</ons-button> -->
<ons-button modifier="material large" onclick="checkForm();">Valider</ons-button>
</div>
</div>
......
......@@ -51,7 +51,7 @@
<label for="invites">Invités (si c'est le cas)</label>
<input name="invites" id="invites" type="text" placeholder="Clients X Y et Z">
<!-- <ons-button modifier="material large" onclick="checkForm();">Ajouter</ons-button> -->
<ons-button modifier="material large" onclick="checkForm();">Valider</ons-button>
</div>
</div>
......
......@@ -29,7 +29,7 @@
</ons-list-item>
</ons-list>
<!-- <ons-button modifier="material large" onclick="checkForm();">Ajouter</ons-button> -->
<ons-button modifier="material large" onclick="checkForm();">Valider</ons-button>
</div>
</div>
</form>
......
......@@ -30,7 +30,7 @@
</ons-list-item>
</ons-list>
<!-- <ons-button modifier="material large" onclick="checkForm();">Ajouter</ons-button> -->
<ons-button modifier="material large" onclick="checkForm();">Valider</ons-button>
</div>
</div>
</form>
......
......@@ -235,7 +235,7 @@
// myDebug('loginJson : tentative de login via ajax request vers le serveur ');
$.ajax({
type: "POST",
url: localGetData("api_server") + "/api/password/reset",
url: localGetData("api_server") + "/api/password/forgot",
timeout: 15000,
data: {
email: lemail,
......@@ -246,7 +246,7 @@
globalNetworkResponse = Date.now();
// myDebug("Success on a un message du serveur on l'affiche ...");
ons.notification.alert(result.message);
ons.notification.alert(result.message, { title: "Information" });
carouselLogin();
},
error: function (result) {
......@@ -254,12 +254,12 @@
// myDebug(result.responseJSON);
if (typeof result.responseJSON.message !== 'undefined') {
// myDebug("Error ... on a un message du serveur on l'affiche ...");
ons.notification.alert(result.responseJSON.message);
ons.notification.alert(result.responseJSON.message, { title: "Erreur" });
}
else {
// myDebug("Error ... pas de message serveur");
// myDebug(result.message);
ons.notification.alert("Erreur ... contactez le service technique pour plus d'informations.");
ons.notification.alert("Erreur ... contactez le service technique pour plus d'informations.", { title: "Erreur" });
// setTimeout(function(){ $("#erreurLogin").hide(); }, 5000);
// ons.notification.alert(result.message);
// myDebug("carouselLogin 6");
......
......@@ -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.17";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.19";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"});}});}
......@@ -37,8 +37,9 @@ else{if(globalSyncInProgress==true){myDebug(" endSendForm on evite de sauvegard
myDebug(" endSendForm on se connecte sur "+localGetData("api_server")+"/api/LdeFrais");var ajaxRequest=$.ajax({url:localGetData("api_server")+"/api/LdeFrais",timeout:10000,type:"POST",data:formdata,processData:false,cache:false,contentType:false,tryCount:3,retryLimit:4,beforeSend:function(xhr){xhr.setRequestHeader('Authorization','Bearer '+localGetData("api_token"));},success:function(result,textStatus,request){hideWait();globalNetworkResponse=Date.now();gotoPage('messageUploadProgress.html',false);myDebug("Request finished (success signal) : "+textStatus+(result+'').length);myDebug("Request status (success signal) : "+request.status);myDebug("+++++++++++++++++++++++++++++++++++++++++++++++");myDebug(result.fileName);myDebug("+++++++++++++++++++++++++++++++++++++++++++++++");if(request.status=="201"){let ajaxURL=localGetData("api_server")+"/api/upload";myDebug("Request finished, creation d'un objet resumable");let r=newResumable(ajaxURL,result,filename);}
else{ons.notification.alert("Erreur de transfert avec le serveur. Votre document est enregistré sur votre téléphone, pensez à le synchroniser avec le serveur dès que vous retrouverez une bonne connexion (utilisez le menu synchronisation à ce moment là).",{title:"Réseau lent"});gotoPage('menu.html',false);}},error:function(request,textStatus,errorThrown){hideWait();uploadErrorSaveFile(filename);myDebug("Request finished (error signal) : "+textStatus);if(textStatus=='timeout'){ons.notification.alert("Erreur de transfert avec le serveur. Votre document est enregistré sur votre téléphone, pensez à le synchroniser avec le serveur dès que vous retrouverez une bonne connexion (utilisez le menu synchronisation à ce moment là).",{title:"Réseau lent"});myDebug('timeout, try again ...');return;}
if(request.status==500){ons.notification.alert("Le serveur n'est pas accessible. Votre document est enregistré sur votre téléphone, pensez à le synchroniser avec le serveur dès que vous retrouverez une bonne connexion (utilisez le menu synchronisation à ce moment là).",{title:"Réseau lent"});gotoPage('menu.html',false);}else{ons.notification.alert("Le serveur n'est pas accessible. Votre document est enregistré sur votre téléphone, pensez à le synchroniser avec le serveur dès que vous retrouverez une bonne connexion (utilisez le menu synchronisation à ce moment là).",{title:"Réseau lent"});gotoPage('menu.html',false);}}});}
function genericCheckForm(){let probleme="";fieldsToValidate=['nom','arrivee','depart','distance','energievalue','label','ladate','email','password','puissancevalue','ttc','typeFrais','typevalue','photoFacturette'];fieldsTexte=["Nom","Arrivée","Départ","Distance","Type de carburant","Label","La date","Courrier électronique","Mot de passe","Puissance du véhicule","Montant TTC","Type de frais","Type","Photo de la facturette"];myDebug("mode d'utilisation pour cette personne : "+localGetData('mode_simple'));if(localGetData('mode_simple')==1){fieldsToValidate=['photoFacturette'];fieldsTexte=["Photo de la facturette"];}
for(let i=0;i<fieldsToValidate.length;i++){field=fieldsToValidate[i];if(document.getElementById(field)){myDebug("Cet element existe, "+field+"("+i+") quelle est sa valeur ..."+document.getElementById(field).value);if(!document.getElementById(field).value){probleme+="<ul>"+fieldsTexte[i]+"</ul>";}}}
function genericCheckForm(){let probleme="";fieldsToValidate=['nom','arrivee','depart','distance','energievalue','label','ladate','email','password','puissancevalue','ttc','typeFrais','typevalue','photoFacturette'];fieldsTexte=["Nom","Arrivée","Départ","Distance","Type de carburant","Objet","La date","Courrier électronique","Mot de passe","Puissance du véhicule","Montant TTC","Type de frais","Type","Photo de la facturette"];myDebug("mode d'utilisation pour cette personne : "+localGetData('mode_simple'));if(localGetData('mode_simple')==1){fieldsToValidate=['photoFacturette'];fieldsTexte=["Photo de la facturette"];}
for(let i=0;i<fieldsToValidate.length;i++){field=fieldsToValidate[i];if(document.getElementById(field)){myDebug("Cet element existe, "+field+"("+i+") quelle est sa valeur ..."+document.getElementById(field).value);if(!document.getElementById(field).value){$('#'+field).attr('style',"border-radius: 5px; border:#FF0000 2px solid;");probleme+="<ul>"+fieldsTexte[i]+"</ul>";}
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é");}}});}
......
......@@ -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.17"; // mis à jour automatiquement à partir du fichier config.xml lors du build android
var globalAppVersion = "1.0.19"; // mis à jour automatiquement à partir du fichier config.xml lors du build android
// **********************************************************************
var dataLDF = "";
var globalResumable;
......
......@@ -272,7 +272,7 @@ function genericCheckForm() {
// myDebug("genericCheckForm");
//Les deux tableaux doivent etre synchro, en haut le code de l'objet en bas le message à afficher
fieldsToValidate = ['nom', 'arrivee', 'depart', 'distance', 'energievalue', 'label', 'ladate', 'email', 'password', 'puissancevalue', 'ttc', 'typeFrais', 'typevalue', 'photoFacturette'];
fieldsTexte = ["Nom", "Arrivée", "Départ", "Distance", "Type de carburant", "Label", "La date", "Courrier électronique", "Mot de passe", "Puissance du véhicule", "Montant TTC", "Type de frais", "Type", "Photo de la facturette"];
fieldsTexte = ["Nom", "Arrivée", "Départ", "Distance", "Type de carburant", "Objet", "La date", "Courrier électronique", "Mot de passe", "Puissance du véhicule", "Montant TTC", "Type de frais", "Type", "Photo de la facturette"];
//Si le compte utilisateur est configuré sur le serveur pour etre en mode simple on exige alors que la photo ...
myDebug("mode d'utilisation pour cette personne : " + localGetData('mode_simple'));
......@@ -287,8 +287,12 @@ function genericCheckForm() {
myDebug("Cet element existe, " + field + "(" + i + ") quelle est sa valeur ..." + document.getElementById(field).value);
//Mais si on a un compte "special ou seule la photo est autorisee alors on laisse faire"
if (!document.getElementById(field).value) {
$('#' + field).attr('style', "border-radius: 5px; border:#FF0000 2px solid;");
probleme += "<ul>" + fieldsTexte[i] + "</ul>";
}
else {
$('#' + field).attr('style', "");
}
}
}
if (probleme != "") {
......
Supports Markdown
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