2016-04-27 09:22:03 +00:00
|
|
|
/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
|
|
|
|
=========================================================*/
|
|
|
|
function inputPhoneFiche(container, navContainer){
|
2016-10-12 16:43:51 +00:00
|
|
|
this.container = container;
|
2016-05-18 12:46:13 +00:00
|
|
|
this.nav_container = navContainer;
|
2016-10-12 16:43:51 +00:00
|
|
|
this.top_size = 10;
|
2016-04-27 09:22:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* [1] Attributs
|
|
|
|
=========================================================*/
|
|
|
|
inputPhoneFiche.prototype = {
|
2016-05-18 12:46:13 +00:00
|
|
|
container: this.container, // Conteneur des fiche fiches relation
|
|
|
|
nav_container: this.nav_container, // Conteneur de la navigation entre les fiches
|
|
|
|
selected: 0, // UID de la FICHE sélectionnée
|
|
|
|
handler: null, // Fonction pour l'enregistrement et la synchronisation des données
|
|
|
|
defaultData: { // Valeurs par défaut
|
2016-05-23 12:06:17 +00:00
|
|
|
sexe: '2',
|
2016-05-18 12:46:13 +00:00
|
|
|
age: '.',
|
2016-11-27 15:19:04 +00:00
|
|
|
interest: '.',
|
2016-11-27 15:26:24 +00:00
|
|
|
relmark: '.',
|
2016-05-18 12:46:13 +00:00
|
|
|
job: '.',
|
|
|
|
famsit: '0', // Choix 1 à 3
|
2016-12-13 18:37:44 +00:00
|
|
|
studies: '.',
|
2016-05-18 12:46:13 +00:00
|
|
|
reltype: '0', // Choix 1 à 9
|
|
|
|
reltypeSpecial: '',
|
|
|
|
city: '',
|
|
|
|
quartier: '',
|
|
|
|
cp: '',
|
|
|
|
loc: '0',
|
|
|
|
duration: ['', ''],
|
|
|
|
context: '0', // Choix 1 à 14
|
|
|
|
contextSpecial: ['', '', ''],
|
2016-11-27 15:09:32 +00:00
|
|
|
freq: ['3', '8', '13', '18', '23'], // 4er choix des 4 pour chaque question
|
2016-11-27 15:14:01 +00:00
|
|
|
irlfreq: ['3', '8', '13', '18', '23'], // 4er choix des 4 pour chaque question
|
2016-05-18 12:46:13 +00:00
|
|
|
connect: ['1', '3', '5', '7', '9', '11'], // Le deuxième choix (Oui/Non) donc 'Non' par défaut pour chaque question
|
|
|
|
connectSpecial: ['', ''],
|
2016-11-27 15:09:32 +00:00
|
|
|
medsoc: '0',
|
2016-11-27 15:29:29 +00:00
|
|
|
medrel: '0',
|
2016-05-18 12:46:13 +00:00
|
|
|
timestamp: 0,
|
|
|
|
valid: false
|
|
|
|
}
|
2016-04-27 09:22:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* [2] Gestion de l'enregistrement des formulaires fiche fiches relation
|
|
|
|
=========================================================*/
|
|
|
|
inputPhoneFiche.prototype.fieldsToStorage = function(){
|
2016-10-10 08:58:44 +00:00
|
|
|
console.group('[phone.fiche] fields to storage');
|
2016-05-18 12:46:13 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
var i, l, deflater, deflated, existingData, obj, hash;
|
2016-05-18 12:46:13 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (1) Pour chaque formulaire de contact présent
|
|
|
|
---------------------------------------------------------*/
|
|
|
|
var existingFiches = $$('[data-sublink="phone"] article.relation-panel .fiche-relation');
|
|
|
|
for( i = 0, l = existingFiches.length ; i < l ; i++ ){
|
2016-05-18 12:46:13 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (1) On initialise notre deflater pour récupérer les valeurs */
|
|
|
|
deflater = new FormDeflater(existingFiches[i], ['input', 'select'], ['data-name']);
|
2016-05-18 12:46:13 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (2) On récupère les données */
|
|
|
|
deflated = deflater.deflate();
|
2016-05-18 12:46:13 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (3) On récupère les données du LSI si elles existent */
|
|
|
|
existingData = lsi.get('p_fiches', deflated.uid);
|
2016-10-20 12:21:46 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
// Si erreur, on passe à la fiche suivante
|
2016-10-22 12:49:59 +00:00
|
|
|
if( !existingData )
|
2016-05-18 12:46:13 +00:00
|
|
|
continue;
|
|
|
|
|
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (4) On récupère et met en forme les valeurs du deflater */
|
|
|
|
obj = {
|
2016-05-18 12:46:13 +00:00
|
|
|
sexe: deflated.sexe,
|
|
|
|
age: deflated.age,
|
2016-11-27 15:19:04 +00:00
|
|
|
interest: deflated.interest,
|
2016-11-27 15:26:24 +00:00
|
|
|
relmark: deflated.relmark,
|
2016-05-18 12:46:13 +00:00
|
|
|
job: deflated.job,
|
|
|
|
famsit: deflated.famsit,
|
|
|
|
studies: deflated.studies,
|
|
|
|
reltype: deflated.reltype,
|
|
|
|
reltypeSpecial: deflated.reltypeSpecial,
|
|
|
|
city: deflated.city,
|
|
|
|
quartier: deflated.quartier,
|
|
|
|
cp: deflated.cp,
|
|
|
|
loc: deflated.loc,
|
|
|
|
duration: deflated.duration,
|
|
|
|
context: deflated.context,
|
2016-11-27 15:09:32 +00:00
|
|
|
medsoc: deflated.medsoc,
|
2016-11-27 15:29:29 +00:00
|
|
|
medrel: deflated.medrel,
|
2016-05-18 12:46:13 +00:00
|
|
|
contextSpecial: deflated.contextSpecial,
|
|
|
|
freq: deflated.freq,
|
2016-11-27 15:14:01 +00:00
|
|
|
irlfreq: deflated.irlfreq,
|
2016-05-18 12:46:13 +00:00
|
|
|
connect: deflated.connect,
|
2016-10-21 13:19:32 +00:00
|
|
|
connectSpecial: deflated.connectSpecial,
|
|
|
|
uid: parseInt(deflated.uid),
|
|
|
|
contact: parseInt(deflated.contact)
|
2016-05-18 12:46:13 +00:00
|
|
|
};
|
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (5) On calcule/compare le hash */
|
2016-05-18 12:46:13 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
// {5.1} On calcule le hash //
|
|
|
|
hash = crc32( JSON.stringify(obj) );
|
2016-10-20 12:21:46 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
// {5.2} Si le hash est identique, on ne fait rien //
|
2016-10-22 12:49:59 +00:00
|
|
|
if( existingData.hasOwnProperty('hash') && hash == existingData.hash )
|
2016-10-21 12:11:47 +00:00
|
|
|
continue;
|
2016-10-20 12:21:46 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
// {5.3} On enregistre le hash //
|
|
|
|
obj.hash = hash;
|
2016-10-20 12:21:46 +00:00
|
|
|
|
2016-10-02 16:01:35 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (6) On calcule la validité des données */
|
|
|
|
obj.valid = this.check(obj);
|
2016-10-20 11:16:31 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (7) On met à jour le `timestamp` (car à ce point, on a une modification) */
|
|
|
|
obj.timestamp = Date.now();
|
2016-10-21 14:09:34 +00:00
|
|
|
console.warn('> FICHE UPDATE ('+(obj.timestamp-input_ts)+')');
|
2016-05-18 12:46:13 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (8) On enregistre les données dans le 'localStorage' */
|
2016-05-18 13:28:02 +00:00
|
|
|
lsi.set('p_fiches', obj.uid, obj);
|
2016-05-18 12:46:13 +00:00
|
|
|
}
|
2016-10-10 08:58:44 +00:00
|
|
|
|
|
|
|
|
2016-10-11 12:05:59 +00:00
|
|
|
console.groupEnd();
|
2016-04-27 09:22:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2016-04-28 09:42:08 +00:00
|
|
|
/* [3] Gestion de l'ajout physique d'une nouvelle fiche
|
2016-04-27 09:22:03 +00:00
|
|
|
=========================================================*/
|
|
|
|
/*
|
|
|
|
*
|
|
|
|
* @objectData<Object> Objet contenant les informations nécessaires à l'affichage
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
inputPhoneFiche.prototype.add = function(objectData){
|
2016-10-10 08:58:44 +00:00
|
|
|
// console.log('FICHE: ADD');
|
2016-05-18 12:46:13 +00:00
|
|
|
|
|
|
|
// Si pas d'UID ou d'UID de contact, on retourne une erreur
|
|
|
|
if( objectData.uid == null || isNaN(objectData.uid) || objectData.contact == null || isNaN(objectData.contact) )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
/* (0) Gestion du formattage des valeur */
|
|
|
|
// {1} Champs de texte //
|
|
|
|
objectData.city = (objectData.city != null) ? objectData.city : this.defaultData.city;
|
|
|
|
objectData.quartier = (objectData.quartier != null) ? objectData.quartier : this.defaultData.quartier;
|
|
|
|
objectData.cp = (objectData.cp != null) ? objectData.cp : this.defaultData.cp;
|
|
|
|
objectData.duration[0] = (objectData.duration[0] != null) ? objectData.duration[0] : this.defaultData.duration[0];
|
|
|
|
objectData.duration[1] = (objectData.duration[1] != null) ? objectData.duration[1] : this.defaultData.duration[1];
|
|
|
|
objectData.reltypeSpecial = (objectData.reltypeSpecial != null) ? objectData.reltypeSpecial : this.defaultData.reltypeSpecial;
|
|
|
|
objectData.contextSpecial[0] = (objectData.contextSpecial[0] != null) ? objectData.contextSpecial[0] : this.defaultData.contextSpecial[0];
|
|
|
|
objectData.contextSpecial[1] = (objectData.contextSpecial[1] != null) ? objectData.contextSpecial[1] : this.defaultData.contextSpecial[1];
|
|
|
|
objectData.contextSpecial[2] = (objectData.contextSpecial[2] != null) ? objectData.contextSpecial[2] : this.defaultData.contextSpecial[2];
|
|
|
|
objectData.connectSpecial[0] = (objectData.connectSpecial[0] != null) ? objectData.connectSpecial[0] : this.defaultData.connectSpecial[0];
|
|
|
|
objectData.connectSpecial[1] = (objectData.connectSpecial[1] != null) ? objectData.connectSpecial[1] : this.defaultData.connectSpecial[1];
|
|
|
|
|
|
|
|
// {2} Champs <select> //
|
2016-11-27 15:19:04 +00:00
|
|
|
objectData.job = (objectData.job != null) ? objectData.job : this.defaultData.job;
|
|
|
|
objectData.studies = (objectData.studies != null) ? objectData.studies : this.defaultData.studies;
|
|
|
|
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
|
|
|
|
objectData.interest = (objectData.interest != null) ? objectData.interest : this.defaultData.interest;
|
2016-11-27 15:26:24 +00:00
|
|
|
objectData.relmark = (objectData.relmark != null) ? objectData.relmark : this.defaultData.relmark;
|
2016-05-18 12:46:13 +00:00
|
|
|
|
|
|
|
// {3} Champs <radio> //
|
|
|
|
objectData.sexe = (objectData.sexe != null) ? objectData.sexe : this.defaultData.sexe;
|
|
|
|
objectData.famsit = (objectData.famsit != null) ? objectData.famsit : this.defaultData.famsit;
|
|
|
|
objectData.reltype = (objectData.reltype != null) ? objectData.reltype : this.defaultData.reltype;
|
|
|
|
objectData.loc = (objectData.loc != null) ? objectData.loc : this.defaultData.loc;
|
|
|
|
objectData.context = (objectData.context != null) ? objectData.context : this.defaultData.context;
|
2016-11-27 15:09:32 +00:00
|
|
|
objectData.medsoc = (objectData.medsoc != null) ? objectData.medsoc : this.defaultData.medsoc;
|
2016-11-27 15:29:29 +00:00
|
|
|
objectData.medrel = (objectData.medrel != null) ? objectData.medrel : this.defaultData.medrel;
|
2016-05-18 12:46:13 +00:00
|
|
|
objectData.freq = (objectData.freq != null) ? objectData.freq : this.defaultData.freq;
|
2016-11-27 15:14:01 +00:00
|
|
|
objectData.irlfreq = (objectData.irlfreq != null) ? objectData.irlfreq : this.defaultData.irlfreq;
|
2016-05-18 12:46:13 +00:00
|
|
|
objectData.connect = (objectData.connect != null) ? objectData.connect : this.defaultData.connect;
|
|
|
|
|
|
|
|
|
|
|
|
// {4} On récupère username/firstname/lastname du contact associé //
|
2016-05-18 13:28:02 +00:00
|
|
|
var associatedContact = lsi.get('p_contacts', objectData.contact);
|
2016-05-18 12:46:13 +00:00
|
|
|
|
|
|
|
// Si on ne trouve pas le contact, on ne fais rien
|
|
|
|
if( associatedContact === false )
|
|
|
|
return false;
|
|
|
|
|
2016-05-29 15:51:06 +00:00
|
|
|
// {2} Si lié à un contact d'une autre étude, on utilise ses informations //
|
2016-10-02 11:36:14 +00:00
|
|
|
var importedFiche = '';
|
|
|
|
|
2016-05-29 15:51:06 +00:00
|
|
|
if( !isNaN(associatedContact.existing) ){
|
|
|
|
var existingData = lsi.get('p_friends', associatedContact.existing);
|
|
|
|
|
|
|
|
// On récupère les données communes
|
|
|
|
associatedContact.username = existingData.name;
|
|
|
|
objectData.age = existingData.age;
|
|
|
|
objectData.sexe = existingData.sexe;
|
|
|
|
objectData.loc = existingData.dist;
|
|
|
|
|
|
|
|
// DISTANCE (LOC) : Si valeur
|
|
|
|
if( !isNaN(existingData.reltype) ){
|
|
|
|
objectData.reltype = existingData.reltype;
|
|
|
|
objectData.reltypeSpecial = '';
|
|
|
|
|
|
|
|
// DISTANCE (LOC) : Si extra
|
|
|
|
}else{
|
|
|
|
objectData.reltype = 10;
|
|
|
|
objectData.reltypeSpecial = existingData.reltype;
|
|
|
|
}
|
|
|
|
|
|
|
|
// On met à jour les études uniquement si 'studies2' est défini //
|
|
|
|
if( existingData.studies2 != null ){
|
2016-05-30 10:23:32 +00:00
|
|
|
objectData.studies = existingData.studies2;
|
2016-11-27 15:19:04 +00:00
|
|
|
objectData.interest = existingData.interest;
|
2016-11-27 15:26:24 +00:00
|
|
|
objectData.relmark = existingData.relmark;
|
2016-05-29 15:51:06 +00:00
|
|
|
objectData.job = existingData.job;
|
|
|
|
objectData.famsit = existingData.famsit;
|
|
|
|
objectData.city = existingData.city;
|
|
|
|
objectData.cp = existingData.cp;
|
|
|
|
objectData.quartier = existingData.quartier;
|
|
|
|
objectData.duration[0] = existingData.duration[0];
|
|
|
|
objectData.duration[1] = existingData.duration[1];
|
|
|
|
objectData.context = existingData.context;
|
2016-11-27 15:09:32 +00:00
|
|
|
objectData.medsoc = existingData.medsoc;
|
2016-11-27 15:29:29 +00:00
|
|
|
objectData.medrel = existingData.medrel;
|
2016-05-30 10:23:32 +00:00
|
|
|
objectData.contextSpecial = existingData.contextExtra;
|
2016-05-29 15:51:06 +00:00
|
|
|
objectData.connect = existingData.connect;
|
2016-05-30 10:23:32 +00:00
|
|
|
objectData.connectSpecial = existingData.connectExtra;
|
2016-05-29 15:51:06 +00:00
|
|
|
objectData.freq = existingData.freq;
|
2016-11-27 15:14:01 +00:00
|
|
|
objectData.irlfreq = existingData.irlfreq;
|
2016-10-02 11:36:14 +00:00
|
|
|
importedFiche = 'Contact importé: non modifiable!';
|
|
|
|
}else{
|
|
|
|
importedFiche = 'Contact importé (incomplet): modifiable partiellement!';
|
2016-05-29 15:51:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
|
|
|
|
// {5} Création physique //
|
2016-05-18 13:08:45 +00:00
|
|
|
this.container.innerHTML += pFicheBuilder.build({
|
2016-10-02 11:36:14 +00:00
|
|
|
importedfiche: importedFiche,
|
2016-05-19 13:14:10 +00:00
|
|
|
name: associatedContact.username,
|
2016-05-18 12:46:13 +00:00
|
|
|
countcall: associatedContact.countcall,
|
|
|
|
countsms: associatedContact.countsms,
|
|
|
|
uid: objectData.uid,
|
|
|
|
contact: objectData.contact, // uid du contact associé
|
|
|
|
city: objectData.city,
|
|
|
|
quartier: objectData.quartier,
|
|
|
|
cp: objectData.cp,
|
|
|
|
duration0: objectData.duration[0],
|
|
|
|
duration1: objectData.duration[1],
|
|
|
|
reltypespecial: objectData.reltypeSpecial,
|
|
|
|
contextspecial0: objectData.contextSpecial[0],
|
|
|
|
contextspecial1: objectData.contextSpecial[1],
|
|
|
|
contextspecial2: objectData.contextSpecial[2],
|
|
|
|
connectspecial0: objectData.connectSpecial[0],
|
|
|
|
connectspecial1: objectData.connectSpecial[1]
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
/* {6} On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
|
|
|
|
var selectedOption = $('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+objectData.job+'"]');
|
|
|
|
if( selectedOption != null )
|
|
|
|
selectedOption.setAttribute('selected', 'selected');
|
|
|
|
|
|
|
|
/* {7} On sélectionne la valeur dans le select (manuellement) des ETUDES */
|
|
|
|
selectedOption = $('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+objectData.studies+'"]');
|
|
|
|
if( selectedOption != null )
|
|
|
|
selectedOption.setAttribute('selected', 'selected');
|
|
|
|
|
|
|
|
/* {8} On sélectionne la valeur dans le select (manuellement) de l'AGE */
|
|
|
|
selectedOption = $('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+objectData.age+'"]');
|
|
|
|
if( selectedOption != null )
|
|
|
|
selectedOption.setAttribute('selected', 'selected');
|
|
|
|
|
2016-11-27 15:19:04 +00:00
|
|
|
/* {9} On sélectionne la valeur dans le select (manuellement) de l'INTEREST */
|
|
|
|
selectedOption = $('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="interest"]>option[value="'+objectData.interest+'"]');
|
|
|
|
if( selectedOption != null )
|
|
|
|
selectedOption.setAttribute('selected', 'selected');
|
2016-05-18 12:46:13 +00:00
|
|
|
|
2016-11-27 15:26:24 +00:00
|
|
|
/* {10} On sélectionne la valeur dans le select (manuellement) de la NOTE DE RELATION */
|
|
|
|
selectedOption = $('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="relmark"]>option[value="'+objectData.relmark+'"]');
|
|
|
|
if( selectedOption != null )
|
|
|
|
selectedOption.setAttribute('selected', 'selected');
|
2016-11-27 15:19:04 +00:00
|
|
|
|
2016-11-27 15:26:24 +00:00
|
|
|
|
|
|
|
/* {11} On sélectionna la valeur des boutons <radio> pour le SEXE */
|
2016-05-18 12:46:13 +00:00
|
|
|
var sexeCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');
|
|
|
|
for( var i = 0 ; i < sexeCreated.length ; i++ )
|
|
|
|
if( sexeCreated[i].value == objectData.sexe ) sexeCreated[i].setAttribute('checked', 'checked');
|
|
|
|
else sexeCreated[i].removeAttribute('checked');
|
|
|
|
|
2016-11-27 15:26:24 +00:00
|
|
|
/* {12} On sélectionna la valeur des boutons <radio> pour la SITUATION FAMILIALE */
|
2016-05-18 12:46:13 +00:00
|
|
|
var famsitCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');
|
|
|
|
for( var i = 0 ; i < famsitCreated.length ; i++ )
|
|
|
|
if( famsitCreated[i].value == objectData.famsit ) famsitCreated[i].setAttribute('checked', 'checked');
|
|
|
|
else famsitCreated[i].removeAttribute('checked');
|
|
|
|
|
2016-11-27 15:26:24 +00:00
|
|
|
/* {13} On sélectionna la valeur des boutons <radio> pour le TYPE DE RELATION */
|
2016-05-18 12:46:13 +00:00
|
|
|
var reltypeCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');
|
|
|
|
for( var i = 0 ; i < reltypeCreated.length ; i++ )
|
|
|
|
if( reltypeCreated[i].value == objectData.reltype ) reltypeCreated[i].setAttribute('checked', 'checked');
|
|
|
|
else reltypeCreated[i].removeAttribute('checked');
|
|
|
|
|
2016-11-27 15:26:24 +00:00
|
|
|
/* {14} On sélectionna la valeur des boutons <radio> pour la LOCATION */
|
2016-05-18 12:46:13 +00:00
|
|
|
var locCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');
|
|
|
|
for( var i = 0 ; i < locCreated.length ; i++ )
|
|
|
|
if( locCreated[i].value == objectData.loc ) locCreated[i].setAttribute('checked', 'checked');
|
|
|
|
else locCreated[i].removeAttribute('checked');
|
|
|
|
|
2016-11-27 15:26:24 +00:00
|
|
|
/* {15} On sélectionna la valeur des boutons <radio> pour le CONTEXTE DE RENCONTRE */
|
2016-05-18 12:46:13 +00:00
|
|
|
var contextCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="context"]');
|
|
|
|
for( var i = 0 ; i < contextCreated.length ; i++ )
|
|
|
|
if( contextCreated[i].value == objectData.context ) contextCreated[i].setAttribute('checked', 'checked');
|
2016-11-28 11:47:06 +00:00
|
|
|
else contextCreated[i].removeAttribute('checked', 'checked');
|
2016-05-18 12:46:13 +00:00
|
|
|
|
2016-11-27 15:26:24 +00:00
|
|
|
/* {16} On sélectionna la valeur des boutons <radio> pour l'UTILISATION DES MEDIAS SOCIAUX */
|
2016-11-27 15:09:32 +00:00
|
|
|
var medsocCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="medsoc"]');
|
|
|
|
for( var i = 0 ; i < medsocCreated.length ; i++ )
|
|
|
|
if( medsocCreated[i].value == objectData.medsoc ) medsocCreated[i].setAttribute('checked', 'checked');
|
|
|
|
else medsocCreated[i].removeAttribute('checked');
|
|
|
|
|
2016-11-27 15:29:29 +00:00
|
|
|
/* {17} On sélectionna la valeur des boutons <radio> pour l'UTILISATION DES MEDIAS SOCIAUX */
|
|
|
|
var medrelCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="medrel"]');
|
|
|
|
for( var i = 0 ; i < medrelCreated.length ; i++ )
|
|
|
|
if( medrelCreated[i].value == objectData.medrel ) medrelCreated[i].setAttribute('checked', 'checked');
|
|
|
|
else medrelCreated[i].removeAttribute('checked');
|
2016-11-27 15:09:32 +00:00
|
|
|
|
2016-11-28 11:47:06 +00:00
|
|
|
|
2016-11-27 15:29:29 +00:00
|
|
|
/* {18} On sélectionna la valeur des boutons <radio> pour les FREQUENCES */
|
2016-05-18 12:46:13 +00:00
|
|
|
var freqCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="freq"]');
|
|
|
|
for( var i = 0 ; i < freqCreated.length ; i++ )
|
|
|
|
if( objectData.freq.indexOf(freqCreated[i].value) > -1 ) freqCreated[i].setAttribute('checked', 'checked');
|
|
|
|
else freqCreated[i].removeAttribute('checked');
|
2016-04-27 12:32:54 +00:00
|
|
|
|
2016-11-27 15:29:29 +00:00
|
|
|
/* {19} On sélectionna la valeur des boutons <radio> pour les FREQUENCES IRL */
|
2016-11-27 15:14:01 +00:00
|
|
|
var irlfreqCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="irlfreq"]');
|
|
|
|
for( var i = 0 ; i < irlfreqCreated.length ; i++ )
|
|
|
|
if( objectData.irlfreq.indexOf(irlfreqCreated[i].value) > -1 ) irlfreqCreated[i].setAttribute('checked', 'checked');
|
|
|
|
else irlfreqCreated[i].removeAttribute('checked');
|
|
|
|
|
2016-11-27 15:29:29 +00:00
|
|
|
/* {20} On sélectionna la valeur des boutons <radio> pour les CONNECTIONS */
|
2016-05-18 12:46:13 +00:00
|
|
|
var connectCreated = $$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="connect"]');
|
|
|
|
for( var i = 0 ; i < connectCreated.length ; i++ )
|
|
|
|
if( objectData.connect.indexOf(connectCreated[i].value) > -1 ) connectCreated[i].setAttribute('checked', 'checked');
|
|
|
|
else connectCreated[i].removeAttribute('checked');
|
2016-04-27 09:22:03 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* [4] Gestion de l'affichage depuis le 'localStorage'
|
|
|
|
=========================================================*/
|
|
|
|
inputPhoneFiche.prototype.storageToFields = function(){
|
2016-10-10 08:58:44 +00:00
|
|
|
console.group('[phone.fiche] storage to fields');
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
var clone, hash;
|
|
|
|
|
|
|
|
/* (1) On récupère les fiches du 'localStorage' */
|
2016-05-18 13:28:02 +00:00
|
|
|
var ficheData = lsi.export('p_fiches');
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (2) On réinitialise le HTML */
|
2016-05-18 12:46:13 +00:00
|
|
|
this.container.innerHTML = '';
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
/* (3) Pour chaque fiche */
|
|
|
|
for( var key in ficheData ){
|
|
|
|
|
2016-10-21 13:19:32 +00:00
|
|
|
// {3.1} On calcule/enregistre le hash (sans `timestamp`, `hash`, `valid`) //
|
2016-10-21 12:11:47 +00:00
|
|
|
clone = cloneObject( ficheData[key] );
|
|
|
|
delete clone['hash'];
|
|
|
|
delete clone['timestamp'];
|
|
|
|
delete clone['valid'];
|
|
|
|
ficheData[key].hash = crc32( JSON.stringify(clone) );
|
|
|
|
|
|
|
|
// On enregistre dans le `localStorage`
|
|
|
|
lsi.set('p_fiches', ficheData[key].uid, ficheData[key]);
|
|
|
|
|
|
|
|
// {3.2} Pour la fiche à rendre graphiquement //
|
2016-10-21 13:19:32 +00:00
|
|
|
if( ficheData[key].uid == this.selected )
|
2016-05-18 12:46:13 +00:00
|
|
|
this.add(ficheData[key]);
|
2016-04-28 09:42:08 +00:00
|
|
|
|
2016-10-21 12:11:47 +00:00
|
|
|
}
|
|
|
|
|
2016-04-28 09:42:08 +00:00
|
|
|
|
2016-10-21 13:19:32 +00:00
|
|
|
/* (4) On met à jour la navigation */
|
2016-05-18 12:46:13 +00:00
|
|
|
this.updateNavBar();
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-10-10 08:58:44 +00:00
|
|
|
|
2016-10-11 12:05:59 +00:00
|
|
|
console.groupEnd();
|
2016-04-27 09:22:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* [5] Synchronisation des CONTACT vers les MINI fiches
|
|
|
|
=========================================================*/
|
|
|
|
inputPhoneFiche.prototype.sync = function(){
|
2016-10-12 14:20:46 +00:00
|
|
|
console.group('[phone.fiche] synchronisation');
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
{ /* (1) Initialisation
|
|
|
|
---------------------------------------------------------*/
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
/* (1) On récupère tous les CONTACTS */
|
|
|
|
var contacts = lsi.export('p_contacts');
|
2016-05-04 17:02:44 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
/* (2) Contiendra les uids des fiches qui seront crées */
|
|
|
|
var addedFicheUids = [];
|
2016-10-21 13:44:00 +00:00
|
|
|
var ficheData, contactData, miniData, i, ficheUid, uid, nbMaxFiche;
|
2016-05-04 17:02:44 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
}
|
2016-10-02 11:04:32 +00:00
|
|
|
|
2016-05-12 19:47:52 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
{ /* (2) Mise à jour en fonction des contacts APRÈS SAISIE
|
|
|
|
---------------------------------------------------------*/
|
2016-05-04 17:02:44 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
// Nombre maximum de fiches (40, sauf si moins de 40 contacts, dans ce cas, le nombre de contacts);
|
2016-10-21 13:44:00 +00:00
|
|
|
nbMaxFiche = lsi.keys('p_contacts').length < 2*this.top_size ? lsi.keys('p_contacts').length : 2*this.top_size;
|
2016-05-12 19:47:52 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
/* (1) Pour chaque CONTACT, on met à jour/crée la FICHE associée */
|
2016-10-21 13:44:00 +00:00
|
|
|
for( uid = 0 ; uid < nbMaxFiche ; uid++ ){
|
2016-05-04 17:02:44 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
/* (2) On récupère les informations de la FICHE (si elle existe) */
|
2016-10-21 13:44:00 +00:00
|
|
|
ficheData = lsi.get('p_fiches', uid);
|
2016-05-04 17:02:44 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
// Si la fiche n'existe pas, on la crée avec les valeurs par défaut
|
|
|
|
!ficheData && ( ficheData = this.defaultData );
|
2016-05-04 17:02:44 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
/* (3) On met à jour la fiche ET on l'enregistre */
|
2016-10-21 13:44:00 +00:00
|
|
|
ficheData.uid = uid;
|
|
|
|
ficheData.contact = uid;
|
|
|
|
lsi.set('p_fiches', uid, ficheData);
|
2016-05-04 17:02:44 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
}
|
2016-05-26 09:39:58 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
}
|
2016-10-02 11:04:32 +00:00
|
|
|
|
2016-05-03 21:45:31 +00:00
|
|
|
|
2016-10-21 13:44:00 +00:00
|
|
|
{ /* (3) Gestion des liens entre mini-fiches et fiches
|
2016-10-17 08:14:50 +00:00
|
|
|
---------------------------------------------------------*/
|
2016-10-20 11:16:31 +00:00
|
|
|
var originalContact, cloneContact,
|
|
|
|
hasSameUsername, hasSameLink,
|
|
|
|
copied;
|
|
|
|
|
2016-10-21 13:44:00 +00:00
|
|
|
var alreadyProcessedUsername = {},
|
|
|
|
alreadyProcessedExisting = {};
|
2016-05-03 21:45:31 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
ficheData = lsi.export('p_fiches');
|
|
|
|
miniData = lsi.export('p_mini-fiches');
|
2016-10-02 11:04:32 +00:00
|
|
|
|
2016-10-18 11:09:39 +00:00
|
|
|
// Pour chaque mini-fiche
|
2016-10-20 11:16:31 +00:00
|
|
|
for( var key in ficheData ){
|
2016-05-03 21:45:31 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
/* (1) On récupère le contact associé */
|
2016-10-20 11:16:31 +00:00
|
|
|
originalContact = lsi.get('p_contacts', ficheData[key].contact);
|
|
|
|
|
|
|
|
// {1.1} On vérifie que le contact n'a pas déja été traité //
|
2016-10-21 13:44:00 +00:00
|
|
|
if( originalContact.username.length > 0 && alreadyProcessedUsername[originalContact.username] != undefined
|
|
|
|
|| originalContact.username.length == 0 && alreadyProcessedExisting[originalContact.existing] != undefined )
|
2016-10-20 11:16:31 +00:00
|
|
|
continue;
|
|
|
|
|
|
|
|
// {1.2} On enregistre username || existing //
|
2016-10-21 13:44:00 +00:00
|
|
|
if( originalContact.username.length > 0 ) alreadyProcessedUsername[originalContact.username] = 0;
|
|
|
|
else alreadyProcessedExisting[originalContact.existing] = 0;
|
2016-10-17 08:14:50 +00:00
|
|
|
|
|
|
|
// Si erreur, on passe au suivant
|
2016-10-20 11:16:31 +00:00
|
|
|
if( !originalContact )
|
2016-10-02 11:04:32 +00:00
|
|
|
continue;
|
2016-05-03 21:45:31 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
/* (3) On récupère la liste des fiches/mini-fiches de même contact*/
|
|
|
|
var clone = [
|
|
|
|
[ 'fiche', ficheData[key] ]
|
|
|
|
];
|
2016-10-17 08:14:50 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
// {3.1} On récupère les fiches de même contact //
|
2016-10-18 11:09:39 +00:00
|
|
|
for( i in ficheData ){
|
2016-10-17 08:14:50 +00:00
|
|
|
|
|
|
|
// on récupère le contact associé (si on est dans `call`, celui dans la tranche avec `sms` / et inversement)
|
2016-10-20 11:16:31 +00:00
|
|
|
cloneContact = lsi.get('p_contacts', ficheData[i].contact);
|
2016-10-17 08:14:50 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
if( i == key || !cloneContact )
|
2016-10-17 08:14:50 +00:00
|
|
|
continue;
|
|
|
|
|
|
|
|
// meme pseudo
|
2016-10-20 11:16:31 +00:00
|
|
|
hasSameUsername = cloneContact.username.length > 0 && originalContact.username === cloneContact.username;
|
2016-10-17 08:14:50 +00:00
|
|
|
// meme lien de contact
|
2016-10-20 11:16:31 +00:00
|
|
|
hasSameLink = !isNaN(cloneContact.existing) && originalContact.existing === cloneContact.existing;
|
2016-10-17 08:14:50 +00:00
|
|
|
|
|
|
|
// si ont le même contact, alors on enregistre le clone (sauf si la même fiche)
|
2016-10-20 11:16:31 +00:00
|
|
|
( hasSameUsername || hasSameLink ) && clone.push( ['fiche', ficheData[i]] );
|
2016-10-17 08:14:50 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
// {3.2} On récupère les mini-fiches de même contact //
|
|
|
|
for( i in miniData ){
|
2016-10-02 11:04:32 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
// on récupère le contact associé (si on est dans `call`, celui dans la tranche avec `sms` / et inversement)
|
|
|
|
cloneContact = lsi.get('p_contacts', miniData[i].contact);
|
2016-10-02 11:04:32 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
// meme pseudo
|
|
|
|
hasSameUsername = cloneContact.username.length > 0 && originalContact.username === cloneContact.username;
|
|
|
|
// meme lien de contact
|
|
|
|
hasSameLink = !isNaN(cloneContact.existing) && originalContact.existing === cloneContact.existing;
|
2016-10-02 11:04:32 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
// si ont le même contact, alors on enregistre le clone (sauf si la même fiche)
|
|
|
|
( hasSameUsername || hasSameLink ) && clone.push( ['mini', miniData[i]] );
|
2016-10-17 08:40:27 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
}
|
2016-10-02 11:04:32 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
// {3.3} si aucun clone, on quitte //
|
|
|
|
if( clone.length === 1 )
|
|
|
|
continue;
|
2016-05-03 21:45:31 +00:00
|
|
|
|
2016-10-14 08:52:09 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
/* (4) On récupère le modèle (dernier modifié) */
|
|
|
|
var clones_ts = []; // contiendra les temps des clones
|
2016-05-03 21:45:31 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
for( i in clone )
|
|
|
|
clones_ts[i] = clone[i][1].hasOwnProperty('timestamp') ? clone[i][1].timestamp : 0;
|
2016-10-17 08:14:50 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
var last_index = clones_ts.indexOf( Math.max.apply(Math, clones_ts) );
|
2016-10-17 08:14:50 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
/* (5) On copie le dernier modifié dans les clones */
|
|
|
|
for( i in clone ){
|
2016-10-17 08:14:50 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
// excepté le dernier modifié
|
|
|
|
if( i == last_index )
|
|
|
|
continue;
|
2016-10-17 08:14:50 +00:00
|
|
|
|
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
/* (5.1) fiche vers fiche */
|
|
|
|
if( clone[i][0] == clone[last_index][0] ){
|
2016-10-17 08:14:50 +00:00
|
|
|
|
2016-10-21 14:09:34 +00:00
|
|
|
/*CLONING_DEBUG*///console.warn('copying fiche#'+clone[last_index][1].uid+' to fiche#'+clone[i][1].uid, clones_ts[last_index]-input_ts, clones_ts[i]-input_ts);
|
2016-10-20 12:21:46 +00:00
|
|
|
copied = cloneObject( clone[last_index][1] );
|
2016-10-20 11:16:31 +00:00
|
|
|
copied.uid = clone[i][1].uid;
|
|
|
|
lsi.set('p_fiches', copied.uid, copied);
|
2016-10-17 08:14:50 +00:00
|
|
|
|
2016-10-21 13:44:00 +00:00
|
|
|
/* (5.2) fiche vers mini OU mini vers fiche*/
|
2016-10-20 11:16:31 +00:00
|
|
|
}else if( clone[last_index][0] == 'fiche' ){
|
|
|
|
|
2016-10-21 14:09:34 +00:00
|
|
|
/*CLONING_DEBUG*///console.warn('copying fiche#'+clone[last_index][1].uid+' to mini#'+clone[i][1].uid, clones_ts[last_index]-input_ts, clones_ts[i]-input_ts);
|
2016-10-20 12:21:46 +00:00
|
|
|
copied = cloneObject( clone[i][1] );
|
2016-10-20 11:16:31 +00:00
|
|
|
copied.age = clone[last_index][1].age;
|
|
|
|
copied.sexe = clone[last_index][1].sexe;
|
|
|
|
copied.loc = clone[last_index][1].loc;
|
|
|
|
copied.reltype = clone[last_index][1].reltype;
|
|
|
|
copied.reltypeSpecial = clone[last_index][1].reltypeSpecial;
|
2016-10-21 14:09:34 +00:00
|
|
|
lsi.set('p_mini-fiches', copied.uid, copied);
|
|
|
|
|
|
|
|
/* (5.3) mini vers fiche */
|
|
|
|
}else{
|
|
|
|
|
|
|
|
/*CLONING_DEBUG*///console.warn('copying mini#'+clone[last_index][1].uid+' to fiche#'+clone[i][1].uid, clones_ts[last_index]-input_ts, clones_ts[i]-input_ts);
|
|
|
|
copied = cloneObject( clone[i][1] );
|
|
|
|
copied.age = clone[last_index][1].age;
|
|
|
|
copied.sexe = clone[last_index][1].sexe;
|
|
|
|
copied.loc = clone[last_index][1].loc;
|
|
|
|
copied.reltype = clone[last_index][1].reltype;
|
|
|
|
copied.reltypeSpecial = clone[last_index][1].reltypeSpecial;
|
|
|
|
|
|
|
|
// Particularité 1, `mini` peut prendre la valeur '.' en plus de celles de `fiche`
|
|
|
|
if( clone[last_index][1].loc == '.' ) copied.loc = '0';
|
|
|
|
|
|
|
|
// Particularité 2, `mini` peut prendre la valeur '9' (inconnu) en plus de celles de `fiche`
|
|
|
|
if( clone[last_index][1].reltype == '9' ){
|
|
|
|
copied.reltype = '10';
|
|
|
|
copied.reltypeSpecial = 'inconnu';
|
|
|
|
}
|
|
|
|
|
|
|
|
lsi.set('p_fiches', copied.uid, copied);
|
2016-10-17 08:14:50 +00:00
|
|
|
|
2016-10-18 11:09:39 +00:00
|
|
|
}
|
2016-10-17 08:14:50 +00:00
|
|
|
|
|
|
|
}
|
2016-10-21 14:09:34 +00:00
|
|
|
/*CLONING_DEBUG*///console.warn('cloning done');
|
2016-10-17 08:14:50 +00:00
|
|
|
|
2016-10-20 11:16:31 +00:00
|
|
|
|
2016-10-17 08:14:50 +00:00
|
|
|
}
|
2016-05-03 20:28:47 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
}
|
2016-05-03 20:28:47 +00:00
|
|
|
|
2016-10-10 08:58:44 +00:00
|
|
|
|
2016-10-11 12:05:59 +00:00
|
|
|
console.groupEnd();
|
2016-04-27 09:22:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* [6] Gestion de la navigation entre les fiches
|
|
|
|
=========================================================*/
|
|
|
|
inputPhoneFiche.prototype.nav = function(element){
|
2016-05-18 12:46:13 +00:00
|
|
|
/* (1) On vérifie que l'élément contient un nombre et existe */
|
2016-10-02 11:04:32 +00:00
|
|
|
if( !(element instanceof Element) )
|
2016-05-18 12:46:13 +00:00
|
|
|
return false;
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-10-02 11:04:32 +00:00
|
|
|
if( !element.getData('n') || isNaN(element.getData('n')) || element.parentNode.id != 'p_nav-fiche' )
|
2016-05-18 12:46:13 +00:00
|
|
|
return false;
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
/* (2) On désactive tous les éléments actifs */
|
|
|
|
var activeElements = $$('[data-sublink="phone"] #p_nav-fiche > span.active');
|
|
|
|
for( var i = 0 ; i < activeElements.length ; i++ )
|
|
|
|
activeElements[i].remClass('active');
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
/* (3) On active l'élément courant */
|
|
|
|
element.addClass('active');
|
|
|
|
this.selected = parseInt(element.getData('n'));
|
2016-04-27 09:22:03 +00:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* [7] Mise à jour de la navigation
|
|
|
|
=========================================================*/
|
2016-04-29 10:03:05 +00:00
|
|
|
inputPhoneFiche.prototype.updateNavBar = function(){
|
2016-05-18 13:28:02 +00:00
|
|
|
var ficheData = lsi.export('p_fiches');
|
2016-04-29 10:03:05 +00:00
|
|
|
|
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
/* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
|
|
|
this.nav_container.innerHTML = '';
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
var keys = Object.keys(ficheData);
|
|
|
|
for( var k = 0 ; k < keys.length ; k++ ){
|
|
|
|
var i = parseInt( keys[k] );
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-05-12 19:47:52 +00:00
|
|
|
|
|
|
|
|
2016-09-30 08:22:21 +00:00
|
|
|
// Si 1ère valeur du top 20 des APPELS, on ajoute le bandeau "APPELS"
|
2016-05-18 12:46:13 +00:00
|
|
|
if( i == 0 )
|
|
|
|
this.nav_container.innerHTML += '<span>APPELS</span>';
|
2016-05-12 19:47:52 +00:00
|
|
|
|
2016-09-30 08:22:21 +00:00
|
|
|
// Si fin du top 20 des APPELS, on met un espace et un border-right
|
|
|
|
if( i < 20 && k < keys.length-1 && keys[k+1] >= 20 )
|
|
|
|
this.nav_container.innerHTML += '<span data-n="'+i+'" class="lc">'+(i%20 + 1)+'</span> ';
|
2016-05-12 19:47:52 +00:00
|
|
|
|
2016-09-30 08:22:21 +00:00
|
|
|
// Si début du top 20 des SMS, on met le label 'SMS' et un border-left
|
|
|
|
else if( i == 20 ){
|
2016-09-30 09:03:18 +00:00
|
|
|
this.nav_container.innerHTML += '<br><span class="fc"> SMS </span>';
|
2016-09-30 08:22:21 +00:00
|
|
|
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%20 + 1)+'</span>';
|
2016-05-12 19:47:52 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
// Sinon, on ajoute juste le bouton
|
|
|
|
}else
|
2016-09-30 08:22:21 +00:00
|
|
|
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%20 + 1)+'</span>';
|
2016-05-18 12:46:13 +00:00
|
|
|
}
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
/* (3) On montre les FICHES qui sont correctes */
|
|
|
|
for( var key in ficheData ){
|
2016-04-28 09:42:08 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
var currentElement = $('[data-sublink="phone"] #p_nav-fiche [data-n="'+ficheData[key].uid+'"]');
|
2016-04-29 10:03:05 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
if( currentElement == null )
|
|
|
|
continue;
|
2016-05-04 17:02:44 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
// Si on ne trouve pas le bouton
|
2016-05-04 17:02:44 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
// Si la FICHE est valide
|
|
|
|
if( ficheData[key].valid === true ) currentElement.addClass('done');
|
|
|
|
// Si elle est invalide
|
|
|
|
else currentElement.remClass('done');
|
2016-04-28 09:42:08 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
}
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-05-18 12:46:13 +00:00
|
|
|
/* (4) On séléctionne par défaut le dernier sélectionné */
|
|
|
|
this.nav( $('[data-sublink="phone"] #p_nav-fiche [data-n="'+this.selected+'"]') );
|
2016-04-27 09:22:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* [8] Vérification des données du formulaire
|
|
|
|
=========================================================*/
|
2016-04-28 09:42:08 +00:00
|
|
|
inputPhoneFiche.prototype.check = function(ficheData){
|
|
|
|
|
2016-11-27 15:14:01 +00:00
|
|
|
/* {1} Vérification des <input> */
|
2016-05-18 12:46:13 +00:00
|
|
|
// 1. La ville a au moins 2 caractères
|
|
|
|
if( ficheData.city.length < 2 )
|
|
|
|
return false;
|
2016-11-27 15:14:01 +00:00
|
|
|
// 2. La durée de la relation en mois est vide ou un nombre
|
2016-05-18 12:46:13 +00:00
|
|
|
if( isNaN(parseInt(ficheData.duration[0])) && ficheData.duration[0].length > 0 )
|
|
|
|
return false;
|
2016-11-27 15:14:01 +00:00
|
|
|
// 3. La durée de la relation en année est vide ou un nombre
|
2016-05-18 12:46:13 +00:00
|
|
|
if( isNaN(parseInt(ficheData.duration[1])) && ficheData.duration[1].length > 0 )
|
|
|
|
return false;
|
2016-11-27 15:14:01 +00:00
|
|
|
// 4. Pour la durée de la relation, au moins un des 2 n'est pas vide
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.duration[0].length+ficheData.duration[1].length == 0 )
|
|
|
|
return false;
|
|
|
|
|
2016-11-27 15:14:01 +00:00
|
|
|
/* {2} Vérification des <select> */
|
|
|
|
// 5. Le <select> pour la profession n'est pas indéfini
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.job == '.' )
|
|
|
|
return false;
|
2016-11-27 15:14:01 +00:00
|
|
|
// 6. Le <select> pour les études n'est pas indéfini
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.studies == '.' )
|
|
|
|
return false;
|
2016-11-27 15:14:01 +00:00
|
|
|
// 7. Le <select> pour l'AGE n'est pas indéfini
|
2016-11-27 15:19:04 +00:00
|
|
|
if( ficheData.age == '.' )
|
|
|
|
return false;
|
|
|
|
// 8. Le <select> pour l'INTEREST n'est pas indéfini
|
|
|
|
if( ficheData.interest == '.' )
|
2016-05-18 12:46:13 +00:00
|
|
|
return false;
|
2016-11-27 15:26:24 +00:00
|
|
|
// 9. Le <select> pour la NOTE DE RELATION n'est pas indéfini
|
|
|
|
if( ficheData.relmark == '.' )
|
|
|
|
return false;
|
2016-05-18 12:46:13 +00:00
|
|
|
|
2016-11-27 15:14:01 +00:00
|
|
|
/* {3} Vérification des <input> radio */
|
2016-11-27 15:26:24 +00:00
|
|
|
// 10. Le SEXE a un et un seul choix
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.sexe == '' )
|
|
|
|
return false;
|
2016-11-27 15:26:24 +00:00
|
|
|
// 11. La SITUATION FAMILIALE a un et un seul choix
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.famsit == '' )
|
|
|
|
return false;
|
2016-11-27 15:26:24 +00:00
|
|
|
// 12. Le TYPE DE RELATION a un et un seul choix
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.reltype == '' )
|
|
|
|
return false;
|
2016-11-27 15:26:24 +00:00
|
|
|
// 13. La DISTANCE DE DOMICILE (location) a un et un seul choix
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.loc == '' )
|
|
|
|
return false;
|
2016-11-27 15:26:24 +00:00
|
|
|
// 14. Le CONTEXTE DE RENCONTRE a un et un seul choix
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.context == '' )
|
|
|
|
return false;
|
2016-11-27 15:26:24 +00:00
|
|
|
// 15. L'UTILISATION DES MEDIAS SOCIAUX a un et un seul choix
|
2016-11-27 15:09:32 +00:00
|
|
|
if( ficheData.medsoc == '' )
|
|
|
|
return false;
|
2016-11-27 15:29:29 +00:00
|
|
|
// 16. L'UTILISATION DES MEDIAS SOCIAUX a un et un seul choix
|
|
|
|
if( ficheData.medrel == '' )
|
|
|
|
return false;
|
|
|
|
// 17. Les FRÉQUENCES ont un et un seul choix (par question de fréquence)
|
2016-05-18 12:46:13 +00:00
|
|
|
for( var i = 0 ; i < ficheData.freq.length ; i++ )
|
|
|
|
if( ficheData.freq[i] == '' )
|
|
|
|
return false;
|
2016-11-27 15:29:29 +00:00
|
|
|
// 18. Les FRÉQUENCES IRL ont un et un seul choix (par question de fréquence)
|
2016-11-27 15:14:01 +00:00
|
|
|
for( var i = 0 ; i < ficheData.irlfreq.length ; i++ )
|
|
|
|
if( ficheData.irlfreq[i] == '' )
|
|
|
|
return false;
|
2016-11-27 15:29:29 +00:00
|
|
|
// 19. Les CONNECTION ont un et un seul choix (par question de connection)
|
2016-05-18 12:46:13 +00:00
|
|
|
for( var i = 0 ; i < ficheData.connect.length ; i++ )
|
|
|
|
if( ficheData.connect[i] == '' )
|
|
|
|
return false;
|
|
|
|
|
2016-11-27 15:14:01 +00:00
|
|
|
/* {4} <input> dépendant d'un choix d'un <input> radio */
|
2016-11-27 15:29:29 +00:00
|
|
|
// 20. TYPE DE RELATION si autre est coché (indice 8), reltypeSpecial doit avoir au moins 2 caractère
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.reltype == '10' && ficheData.reltypeSpecial.length < 2 )
|
|
|
|
return false;
|
2016-11-27 15:29:29 +00:00
|
|
|
// 21. CONTEXTE DE RELATION si est coché indice 11, contactSpecial[0] doit avoir au moins 2 caractères
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.context == '11' && ficheData.contextSpecial[0].length < 2 )
|
|
|
|
return false;
|
|
|
|
|
2016-11-27 15:29:29 +00:00
|
|
|
// 22. CONTEXTE DE RELATION si est coché indice 12, contextSpecial[1] doit avoir au moins 2 caractères
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.context == '12' && ficheData.contextSpecial[1].length < 2 )
|
|
|
|
return false;
|
|
|
|
|
2016-11-27 15:29:29 +00:00
|
|
|
// 23. CONTEXTE DE RELATION si est coché indice 13, contextSpecial[2] doit avoir au moins 2 caractères
|
2016-05-18 12:46:13 +00:00
|
|
|
if( ficheData.context == '13' && ficheData.contextSpecial[2].length < 2 )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-11-27 15:29:29 +00:00
|
|
|
// 24. Si tout s'est bien passé, on retourne TRUE
|
2016-05-18 12:46:13 +00:00
|
|
|
return true;
|
2016-04-27 09:22:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* [9] Point d'amorçage de la gestion des contacts
|
|
|
|
=========================================================*/
|
|
|
|
inputPhoneFiche.prototype.attach = function(handler){
|
2016-10-10 08:58:44 +00:00
|
|
|
console.group('[phone.fiche] attaching events');
|
2016-05-18 12:46:13 +00:00
|
|
|
|
|
|
|
/* (1) On initialise le jeu de données */
|
2016-05-18 13:28:02 +00:00
|
|
|
lsi.createDataset('p_fiches');
|
2016-05-18 12:46:13 +00:00
|
|
|
|
|
|
|
/* (2) On charge les fiche fiches depuis la mémoire ('localStorage') */
|
|
|
|
this.storageToFields();
|
|
|
|
|
|
|
|
/* (3) On attache la barre de navigation à une fonction */
|
|
|
|
// On enregistre le handler
|
|
|
|
this.handler = handler;
|
|
|
|
|
|
|
|
/* (2) On attache l'évènement sur le bouton d'ajout de contact */
|
|
|
|
this.nav_container.addEventListener('click', function(e){
|
|
|
|
// 1. On gère la navigation
|
2016-10-12 16:43:51 +00:00
|
|
|
this.nav(e.target);
|
2016-05-18 12:46:13 +00:00
|
|
|
// 2. On gere le chargement dynamique
|
2016-10-12 16:43:51 +00:00
|
|
|
this.handler(e.target);
|
|
|
|
}.bind(this), false);
|
2016-04-27 09:22:03 +00:00
|
|
|
|
2016-10-10 08:58:44 +00:00
|
|
|
|
2016-10-11 12:05:59 +00:00
|
|
|
console.groupEnd();
|
2016-04-27 09:22:03 +00:00
|
|
|
};
|