Module pour importation : Différence entre versions

Aller à : navigation, rechercher
(Création de l'import de mise à jour des soldes des comptes Clients via écritures comptable)
(Utilisation de l'import de mise à jour des soldes des comptes Clients via écritures comptable)
 
(22 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 8 : Ligne 8 :
 
'''/!\ : Le module d'import n'est pas fonctionnel sous le navigateur Internet Explorer. Il est recommandé d'utiliser un autre navigateur pour utiliser ce module.'''
 
'''/!\ : Le module d'import n'est pas fonctionnel sous le navigateur Internet Explorer. Il est recommandé d'utiliser un autre navigateur pour utiliser ce module.'''
  
Ce module trouve notamment [[#Mise_en_place_de_requ.C3.AAtes_d.27import_pour_SMILE|son application]] pour la synchronisation avec le fichier [http://io.addx-tech.com/smile/ SMILE] de la [http://www.ff-aero.fr/accueil.php Fédération Française Aéronautique].
+
Ce module trouve notamment [[#Mise_en_place_de_requêtes_d'import_pour_SMILE|son application]] pour la synchronisation avec le fichier [http://io.addx-tech.com/smile/ SMILE] de la [http://www.ff-aero.fr/accueil.php Fédération Française Aéronautique].
  
 
Ce module est décomposé en 3 étapes :
 
Ce module est décomposé en 3 étapes :
 
#Le [[#Formule_de_rapprochement|rapprochement]] qui permet de faire correspondre les lignes d'un fichier à importer avec la base de données OpenFlyers
 
#Le [[#Formule_de_rapprochement|rapprochement]] qui permet de faire correspondre les lignes d'un fichier à importer avec la base de données OpenFlyers
#Le [[#Formule_de_test_de_mise_.C3.A0_jour|test de mise à jour]] qui permet de déterminer, pour les lignes rapprochées, si une mise à jour de la ligne correspondante dans la base OpenFlyers est préconisée ou non
+
#Le [[#Formule_de_test_de_mise_à_jour|test de mise à jour]] qui permet de déterminer, pour les lignes rapprochées, si une mise à jour de la ligne correspondante dans la base OpenFlyers est préconisée ou non
#La [[#Formule_de_mise_.C3.A0_jour|mise à jour]] qui effectue des requêtes déterminées dans la base OpenFlyers pour les lignes qui ont été déterminées comme devant être mises à jour
+
#La [[#Formule_de_mise_à_jour|mise à jour]] qui effectue des requêtes déterminées dans la base OpenFlyers pour les lignes qui ont été déterminées comme devant être mises à jour
  
 
Le processus d'import peut fonctionner de façon complétement automatique (via une synchronisation journalière à partir d'une source de données extérieure accessible via internet), de façon semi-automatique (la récupération des données est transparente et déclenchée par une simple validation sur un bouton, puis un tableau liste les lignes à synchroniser et une nouvelle validation permet de déclencher la mise à jour) ou de façon complétement manuellement (la récupération des données se fait alors par upload manuel et les lignes à mettre à jour peuvent être sélectionner ou dé-sélectionner manuellement).
 
Le processus d'import peut fonctionner de façon complétement automatique (via une synchronisation journalière à partir d'une source de données extérieure accessible via internet), de façon semi-automatique (la récupération des données est transparente et déclenchée par une simple validation sur un bouton, puis un tableau liste les lignes à synchroniser et une nouvelle validation permet de déclencher la mise à jour) ou de façon complétement manuellement (la récupération des données se fait alors par upload manuel et les lignes à mettre à jour peuvent être sélectionner ou dé-sélectionner manuellement).
Ligne 23 : Ligne 23 :
  
 
Nous allons faire un rapprochement sur le nom et le prénom par une égalité. La formule de rapprochement est donc :
 
Nous allons faire un rapprochement sur le nom et le prénom par une égalité. La formule de rapprochement est donc :
<sql>person::stripChars(CONCAT(#nom,#prnom)) = stripChars(CONCAT(person.last_name,person.first_name))</sql>
+
<sql>person::stripChars(CONCAT(#nom,#prenom)) = stripChars(CONCAT(person.last_name,person.first_name))</sql>
  
<nowiki>#nom</nowiki> correspond au champ "Nom" du fichier. #prnom correspond au champ "Prénom" du fichier. Ces variables sont affichées sur le tableau, en seconde ligne d'entête.
+
*<nowiki>#nom</nowiki> correspond au champ "Nom" du fichier.
 +
*#prenom correspond au champ "Prénom" du fichier.
 +
Ces variables sont affichées sur le tableau, en seconde ligne d'entête.
  
stripChars est une fonction faite maison permettant de retirer tout ce qui est tiret et espace d'un nom afin de faire un meilleur rapprochement entre le fichier et la base de données.
+
stripChars est une fonction permettant de retirer tout ce qui est tiret et espace d'un nom afin de faire un meilleur rapprochement entre le fichier et la base de données.
  
 
Lors d'un import, des lignes rouges du tableau généré passeront en orange. Les lignes oranges représenteront les utilisateurs rapprochés.
 
Lors d'un import, des lignes rouges du tableau généré passeront en orange. Les lignes oranges représenteront les utilisateurs rapprochés.
Ligne 79 : Ligne 81 :
 
*Dans le cas "2" (=paiement de la licence FFA à la structure aéronautique), l'encaissement du paiement devra être saisi dans OpenFlyers (cette opération peut être faite par l'adhérent lui-même : il s'agit pour l'adhérent de saisir un simple encaissement sur son compte pilote)
 
*Dans le cas "2" (=paiement de la licence FFA à la structure aéronautique), l'encaissement du paiement devra être saisi dans OpenFlyers (cette opération peut être faite par l'adhérent lui-même : il s'agit pour l'adhérent de saisir un simple encaissement sur son compte pilote)
 
*Dans les 2 cas la mise en place d'une synchronisation par import du fichier SMILE est recommandée. Elle passe par des [[#Actions_communes|actions communes]] puis des actions spécifiques qui ont pour objet :
 
*Dans les 2 cas la mise en place d'une synchronisation par import du fichier SMILE est recommandée. Elle passe par des [[#Actions_communes|actions communes]] puis des actions spécifiques qui ont pour objet :
*#De [[#Mise_.C3.A0_jour_simple_de_la_validité_.22licence_FFA.22|mettre à jour uniquement la validité "licence FFA"]] (cas 1)
+
*#De [[#Mise_à_jour_simple_de_la_validité_.22licence_FFA.22|mettre à jour uniquement la validité "licence FFA"]] (cas 1)
*#De [[#Synchronisation_de_la_validité_.22licence_FFA.22_et_g.C3.A9n.C3.A9ration_des_.C3.A9critures_comptables_associ.C3.A9es|mettre à jour la validité "licence FFA" ET de générer les écritures de vente]] correspondante de cette même validité (cas 2)
+
*#De [[#Synchronisation_de_la_validité_.22licence_FFA.22_et_génération_des_écritures_comptables_associées|mettre à jour la validité "licence FFA" ET de générer les écritures de vente]] correspondante de cette même validité (cas 2)
 
De plus, afin de mieux sécuriser le rapprochement des bases de données, nous préconisons d'effectuer un premier rapprochement sur les couples (nom, prénom) afin de générer les validités "licence FFA" puis d'effectuer les opérations de mise à jour non plus sur ces couples mais sur le numéro de licence FFA.
 
De plus, afin de mieux sécuriser le rapprochement des bases de données, nous préconisons d'effectuer un premier rapprochement sur les couples (nom, prénom) afin de générer les validités "licence FFA" puis d'effectuer les opérations de mise à jour non plus sur ces couples mais sur le numéro de licence FFA.
 
==Actions communes==
 
==Actions communes==
Ligne 94 : Ligne 96 :
 
Dans le cas où le but est uniquement de contrôler que l'adhérent est à jour de sa cotisation, il n'est pas indispensable de créer les autres "validités FFA". C'est néanmoins recommandé car cela permet d'avoir une visibilité aussi bien pour l'adhérent que pour les gestionnaires sur ces éléments.
 
Dans le cas où le but est uniquement de contrôler que l'adhérent est à jour de sa cotisation, il n'est pas indispensable de créer les autres "validités FFA". C'est néanmoins recommandé car cela permet d'avoir une visibilité aussi bien pour l'adhérent que pour les gestionnaires sur ces éléments.
  
Donc, dans le cas où on crée les autres "validités FFA", il faut répéter l'opération de [[#Cr.C3.A9ation_de_la_validité_.22licence_FFA.22|création de "licence FFA"]] pour les validités suivantes mais sans activer la '''Gestion du code identifiant''' :
+
Donc, dans le cas où on crée les autres "validités FFA", il faut répéter l'opération de [[#Création_de_la_validité_.22licence_FFA.22|création de "licence FFA"]] pour les validités suivantes mais sans activer la '''Gestion du code identifiant''' :
 
*Assurance IA FFA de base
 
*Assurance IA FFA de base
 
*Abonnement INFO-PILOTE
 
*Abonnement INFO-PILOTE
Ligne 110 : Ligne 112 :
  
 
===Création des autres champs additionnels "FFA"===
 
===Création des autres champs additionnels "FFA"===
Dans le cas où les autres types de validités FFA ont été créées, il faut alors également créer les autre champs additionnels suivants sur [[#Cr.C3.A9ation_du_champ_additionnel_.22licenceFFAId.22|le modèle du champ additionnel "licenceFFAId"]] :
+
Dans le cas où les autres types de validités FFA ont été créées, il faut alors également créer les autre champs additionnels suivants sur [[#Création_du_champ_additionnel_.22licenceFFAId.22|le modèle du champ additionnel "licenceFFAId"]] :
 
*AssuranceIAFFAId
 
*AssuranceIAFFAId
 
*AbonnementIPId
 
*AbonnementIPId
Ligne 123 : Ligne 125 :
 
*Mettre comme intitulé "Import des numéros de licence FFA"
 
*Mettre comme intitulé "Import des numéros de licence FFA"
 
*Mettre comme [[#Formule_de_rapprochement|formule de rapprochement]] :
 
*Mettre comme [[#Formule_de_rapprochement|formule de rapprochement]] :
<sql>person::stripChars(CONCAT(#nom,#prnom)) = stripChars(CONCAT(person.last_name,person.first_name))</sql>
+
<sql>person::stripChars(CONCAT(#nom,#prenom)) = stripChars(CONCAT(person.last_name,person.first_name))</sql>
*Mettre comme [[#Formule_de_test_de_mise_.C3.A0_jour|formule de test de mise à jour]] :
+
*Mettre comme [[#Formule_de_test_de_mise_à_jour|formule de test de mise à jour]] :
 
<sql>SELECT person.id, 1
 
<sql>SELECT person.id, 1
 
FROM person
 
FROM person
Ligne 130 : Ligne 132 :
 
LEFT JOIN validity ON merge_data.person_id=validity.person_id AND validity.validity_type_id=$licenceFFAId
 
LEFT JOIN validity ON merge_data.person_id=validity.person_id AND validity.validity_type_id=$licenceFFAId
 
WHERE merge_data.person_id IS NOT NULL</sql>
 
WHERE merge_data.person_id IS NOT NULL</sql>
*Mettre comme [[#Formule_de_mise_.C3.A0_jour|formule de mise à jour]] :
+
*Mettre comme [[#Formule_de_mise_à_jour|formule de mise à jour]] :
 
<sql>INSERT INTO validity (person_id, validity_type_id, ident_value, expire_date )
 
<sql>INSERT INTO validity (person_id, validity_type_id, ident_value, expire_date )
 
VALUES ('$person_id', '$licenceFFAId', '#nlicence', '2010-12-31')
 
VALUES ('$person_id', '$licenceFFAId', '#nlicence', '2010-12-31')
Ligne 227 : Ligne 229 :
 
*Mettre comme [[#Formule_de_rapprochement|formule de rapprochement]] :
 
*Mettre comme [[#Formule_de_rapprochement|formule de rapprochement]] :
 
<sql>validity::TRIM(LEADING '0' FROM #nlicence) = validity.ident_value </sql>
 
<sql>validity::TRIM(LEADING '0' FROM #nlicence) = validity.ident_value </sql>
*Mettre comme [[#Formule_de_test_de_mise_.C3.A0_jour|formule de test de mise à jour]] :
+
*Mettre comme [[#Formule_de_test_de_mise_à_jour|formule de test de mise à jour]] :
 
<sql>SELECT person.id, IF(validity.expire_date < '2011-01-01' OR validity.expire_date IS NULL,1,0)
 
<sql>SELECT person.id, IF(validity.expire_date < '2011-01-01' OR validity.expire_date IS NULL,1,0)
 
FROM person
 
FROM person
Ligne 237 : Ligne 239 :
 
LEFT JOIN  validity ON validity.person_id=person.id AND validity_type_id=$licenceFFAId
 
LEFT JOIN  validity ON validity.person_id=person.id AND validity_type_id=$licenceFFAId
 
WHERE validity_type_id IS NULL</sql>
 
WHERE validity_type_id IS NULL</sql>
*Mettre comme [[#Formule_de_mise_.C3.A0_jour|formule de mise à jour]] :
+
*Mettre comme [[#Formule_de_mise_à_jour|formule de mise à jour]] :
 
<sql>CALL saleValidity($licenceFFAId, $person_id, '#lic');
 
<sql>CALL saleValidity($licenceFFAId, $person_id, '#lic');
 
CALL saleValidity($AssuranceIAFFAId, $person_id, '#assuranceiadebase');
 
CALL saleValidity($AssuranceIAFFAId, $person_id, '#assuranceiadebase');
Ligne 256 : Ligne 258 :
 
#Remplacer les majuscules par des minuscules dans les titres.
 
#Remplacer les majuscules par des minuscules dans les titres.
 
#Dans toutes les cellules, supprimer les espaces malencontreusement ajoutés avant ou après les mots
 
#Dans toutes les cellules, supprimer les espaces malencontreusement ajoutés avant ou après les mots
#Rajouter un anti-slash "\" devant tous les apostrophes avec l'outil "rechercher/remplacer" du logiciel utilisé. Supprimer les apostrophes des titres.
+
#Rajouter un anti-slash "\" devant tous les apostrophes avec l'outil "rechercher/remplacer" du logiciel utilisé.
 +
#Remplacer le signe & par un "et".
 +
#Supprimer les apostrophes des titres.
 
#*Exemple de correction du format d'un titre : '''"Date d'expiration licence privée"''' devient '''"date expiration licence privee"'''.
 
#*Exemple de correction du format d'un titre : '''"Date d'expiration licence privée"''' devient '''"date expiration licence privee"'''.
 
#Mettre les données de la colonne "nationalite" au format '''FR''' pour française, '''EN''' pour anglaise, etc.
 
#Mettre les données de la colonne "nationalite" au format '''FR''' pour française, '''EN''' pour anglaise, etc.
Ligne 268 : Ligne 272 :
 
#Enregistrer le fichier sous le format CSV et le dupliquer.
 
#Enregistrer le fichier sous le format CSV et le dupliquer.
 
#Supprimer le caractère spécial '''&''' présent dans le document importé
 
#Supprimer le caractère spécial '''&''' présent dans le document importé
 +
 +
==Export du fichier de données avec OpenOffice==
 +
Une fois que l'onglet contenant les données à exporter est mis au propre :
 +
#Garder l'onglet à exporter de visible
 +
#'''Fichier > Enregistrer sous...'''
 +
#Choisir le répertoire et le nom de fichier
 +
#Sélectionner dans le champ '''Type''' "Texte CSV (.csv)"
 +
#Cocher le champ '''Éditer les paramètres du filtre'''
 +
#Cliquer sur le bouton '''Enregistrer'''
 +
#Dans le champ '''Jeu de caractères''', sélectionner "Unicode (UTF-8)"
 +
#Dans le champ '''Séparateur de champs''', sélectionner ";"
 +
#Dans le champ '''Séparateur de texte''', vider le contenu en laissant le focus sur l'ensemble des données et en utilisant la touche Suppr
 +
#Cliquer sur le bouton '''OK'''.
 +
 +
===Paramétrage des imports de champs additionnels===
 +
L'import suivant nécessite la construction d'un fichier csv avec les numéros d'identifiants OpenFlyers des utilisateurs obtenus grâce à l'export de la liste des utilisateurs.
 +
 +
On part sur la base d'un fichier CSV ayant cette structure :
 +
<pre>idopenflyers;accidentcontact;phoneaccident
 +
251;Mme DUPONT Myriam;01.02.03.04.05</pre>
 +
 +
Il nécessite également de connaitre les numéros de champs additionnels en base de données.
 +
''Documenter comment récupérer les numéros de champs additionnels''
 +
 +
===Création de l'import de champs additionnels===
 +
Dans '''Admin > Utilisateurs > Imports > Créer/Modifier''' :
 +
*Cliquer sur '''Ajouter'''
 +
*Mettre comme intitulé "Import de champs additionnels"
 +
*Mettre comme [[#Formule_de_rapprochement|formule de rapprochement]] :
 +
<sql>person::#idopenflyers=person.id</sql>
 +
*Mettre comme [[#Formule_de_test_de_mise_à_jour|formule de test de mise à jour]] :
 +
<sql>SELECT person.id, 1
 +
FROM person</sql>
 +
*Mettre comme [[#Formule_de_mise_à_jour|formule de mise à jour]] :
 +
<sql>INSERT INTO `extra_field_content` (`category_id`, `extra_field_id`, `content`)
 +
VALUES ('$person_id', '17', '#accidentcontact') # 17 is in this example the id of the extra field for "Personne à prévenir en cas d'accident"
 +
ON DUPLICATE KEY UPDATE `content` = '#accidentcontact';
 +
 +
INSERT INTO `extra_field_content` (`category_id`, `extra_field_id`, `content`)
 +
VALUES ('$person_id', '18', '#phoneaccident')
 +
ON DUPLICATE KEY UPDATE `content` = '#phoneaccident';</sql>
 +
*Valider
 +
 +
==Import des dates de naissance==
 +
L'import suivant nécessite la construction d'un fichier csv avec les numéros d'identifiants OpenFlyers des utilisateurs obtenus grâce à l'export de la liste des utilisateurs.
 +
 +
On part sur la base d'un fichier CSV ayant cette structure :
 +
<pre>idopenflyers;naissance
 +
251;1956-12-07</pre>
 +
 +
===Création de l'import des dates de naissance===
 +
Dans '''Admin > Utilisateurs > Imports > Créer/Modifier''' :
 +
*Cliquer sur '''Ajouter'''
 +
*Mettre comme intitulé "Import des dates de naissance"
 +
*Mettre comme [[#Formule_de_rapprochement|formule de rapprochement]] :
 +
<sql>person::#idopenflyers=person.id</sql>
 +
*Mettre comme [[#Formule_de_test_de_mise_à_jour|formule de test de mise à jour]] :
 +
<sql>SELECT person.id, 1
 +
FROM person</sql>
 +
*Mettre comme [[#Formule_de_mise_à_jour|formule de mise à jour]] :
 +
<sql>UPDATE person SET birthdate="#naissance" WHERE person.id=$person_id;</sql>
 +
*Valider
  
 
==Import des utilisateurs==
 
==Import des utilisateurs==
Ligne 293 : Ligne 359 :
 
*Mettre comme [[#Formule_de_rapprochement|formule de rapprochement]] :
 
*Mettre comme [[#Formule_de_rapprochement|formule de rapprochement]] :
 
<sql>person::stripChars(CONCAT(#nom,#prenom)) = stripChars(CONCAT(person.last_name,person.first_name))</sql>
 
<sql>person::stripChars(CONCAT(#nom,#prenom)) = stripChars(CONCAT(person.last_name,person.first_name))</sql>
*Mettre comme [[#Formule_de_test_de_mise_.C3.A0_jour|formule de test de mise à jour]] :
+
*Mettre comme [[#Formule_de_test_de_mise_à_jour|formule de test de mise à jour]] :
 
<sql>SELECT id, 0
 
<sql>SELECT id, 0
 
FROM person
 
FROM person
 
UNION
 
UNION
 
SELECT null, 1</sql>
 
SELECT null, 1</sql>
*Mettre comme [[#Formule_de_mise_.C3.A0_jour|formule de mise à jour]] :
+
*Mettre comme [[#Formule_de_mise_à_jour|formule de mise à jour]] :
 
<sql>createOrUpdateUser($person_id, '#prenom', '#nom', '#email', '#adressepostale', '#codepostal', '#ville', '#etat', '#pays', '#telephonepersonnel', '#telephoneportable', '#telephoneprofessionnel', '#sexe', '#datenaissance', '#nationalite');</sql>
 
<sql>createOrUpdateUser($person_id, '#prenom', '#nom', '#email', '#adressepostale', '#codepostal', '#ville', '#etat', '#pays', '#telephonepersonnel', '#telephoneportable', '#telephoneprofessionnel', '#sexe', '#datenaissance', '#nationalite');</sql>
 
*Valider
 
*Valider
Ligne 313 : Ligne 379 :
 
*Dans l'autre fichier CSV, laisser les colonnes correspondant aux validités et supprimer toutes les autres sauf "nom", "prenom" et "numero licence ffa". Ces colonnes servent de repère pour affecter les validités aux bonnes personnes.
 
*Dans l'autre fichier CSV, laisser les colonnes correspondant aux validités et supprimer toutes les autres sauf "nom", "prenom" et "numero licence ffa". Ces colonnes servent de repère pour affecter les validités aux bonnes personnes.
 
*Aller dans '''Utilisateurs > Import > Créer/Modifier''' et ajouter "Import des validités". Cet import sera modifié pour chaque validité importée.
 
*Aller dans '''Utilisateurs > Import > Créer/Modifier''' et ajouter "Import des validités". Cet import sera modifié pour chaque validité importée.
*Pour ajouter les formules, se reporter au paragraphe d'[[#Param.C3.A9trage_des_imports_des_num.C3.A9ros_de_licence_FFA|import de la licence FFA]].
+
*Pour ajouter les formules, se reporter au paragraphe d'[[#Paramétrage_des_imports_des_numéros_de_licence_FFA|import de la licence FFA]].
 
*Sélectionner le Type de validité correspondant à la colonne importée, à la fin du formulaire.
 
*Sélectionner le Type de validité correspondant à la colonne importée, à la fin du formulaire.
 
*Valider puis aller dans le menu '''Utilisateurs > Import > Import des validités''' précédemment créé.
 
*Valider puis aller dans le menu '''Utilisateurs > Import > Import des validités''' précédemment créé.
*[[#Import_des_num.C3.A9ros_de_licence_FFA|Importer le fichier CSV]] et vérifier que toutes les lignes soient de couleur verte.
+
*[[#Import_des_numéros_de_licence_FFA|Importer le fichier CSV]] et vérifier que toutes les lignes soient de couleur verte.
  
 
==Mise à jour des soldes des comptes Clients par écritures comptables==
 
==Mise à jour des soldes des comptes Clients par écritures comptables==
Ligne 361 : Ligne 427 :
 
===Création de l'import de mise à jour des soldes des comptes Clients via écritures comptable===
 
===Création de l'import de mise à jour des soldes des comptes Clients via écritures comptable===
 
Il faut créer ou avoir créé au préalable :
 
Il faut créer ou avoir créé au préalable :
*le [[#Cr.C3.A9ation_du_compte_de_bilan_.22Report_.C3.A0_nouveau.22|compte de bilan "Report à nouveau"]]
+
*le [[#Création_du_compte_de_bilan_.22Report_à_nouveau.22|compte de bilan "Report à nouveau"]]
*le [[#Cr.C3.A9ation_du_champ_additionnel_.22Type_de_compte_.C3.A0_mettre_.C3.A0_jour.22|champ additionnel "Type de compte à mettre à jour"]]
+
*le [[#Création_du_champ_additionnel_.22Type_de_compte_à_mettre_à_jour.22|champ additionnel "Type de compte à mettre à jour"]]
*le [[#Cr.C3.A9ation_du_champ_additionnel_.22Compte_de_contre-partie.22|champ additionnel "Compte de contre-partie"]]
+
*le [[#Création_du_champ_additionnel_.22Compte_de_contre-partie.22|champ additionnel "Compte de contre-partie"]]
*le [[#Cr.C3.A9ation_du_champ_additionnel_.22Date_de_flux.22|champ additionnel "Date de flux"]]
+
*le [[#Création_du_champ_additionnel_.22Date_de_flux.22|champ additionnel "Date de flux"]]
  
 
Dans '''Admin > Utilisateurs > Imports > Créer/Modifier''' :
 
Dans '''Admin > Utilisateurs > Imports > Créer/Modifier''' :
Ligne 372 : Ligne 438 :
 
:* Dans le cas où on rapproche par le nom et le prénom :
 
:* Dans le cas où on rapproche par le nom et le prénom :
 
:<sql>person::stripChars(CONCAT(#nom,#prenom)) = stripChars(CONCAT(person.last_name,person.first_name))</sql>
 
:<sql>person::stripChars(CONCAT(#nom,#prenom)) = stripChars(CONCAT(person.last_name,person.first_name))</sql>
:* Dans le cas où on rapproche par le numéro d'id (cf. ci-après le paragraphe [[#G.C3.A9n.C3.A9ration_du_fichier_des_utilisateurs_dont_le_solde_est_.C3.A0_importer|Génération du fichier des utilisateurs dont le solde est à importer]]) :
+
:* Dans le cas où on rapproche par le numéro d'id (cf. ci-après le paragraphe [[#Génération_du_fichier_des_utilisateurs_dont_le_solde_est_à_importer|Génération du fichier des utilisateurs dont le solde est à importer]]) :
 
:<sql>person::#idopenflyers=person.id</sql>
 
:<sql>person::#idopenflyers=person.id</sql>
*Mettre comme [[#Formule_de_test_de_mise_.C3.A0_jour|formule de test de mise à jour]] :
+
*Mettre comme [[#Formule_de_test_de_mise_à_jour|formule de test de mise à jour]] :
 
<sql>SELECT person.id, 1
 
<sql>SELECT person.id, 1
 
FROM person
 
FROM person
 
LEFT JOIN account ON (account.owner_id=person.id AND account.category=2)
 
LEFT JOIN account ON (account.owner_id=person.id AND account.category=2)
 
WHERE account.account_type=$accountTypeId</sql>
 
WHERE account.account_type=$accountTypeId</sql>
*Mettre comme [[#Formule_de_mise_.C3.A0_jour|formule de mise à jour]] :
+
*Mettre comme [[#Formule_de_mise_à_jour|formule de mise à jour]] :
 
<sql>createAccountEntries($person_id, $accountTypeId, $compensationAccountId, '#balance', '$flowDate');</sql>
 
<sql>createAccountEntries($person_id, $accountTypeId, $compensationAccountId, '#balance', '$flowDate');</sql>
 
*Sélectionner le type de compte '''Clients''' pour le champ '''$accountTypeId (Type de compte à mettre à jour)'''
 
*Sélectionner le type de compte '''Clients''' pour le champ '''$accountTypeId (Type de compte à mettre à jour)'''
Ligne 388 : Ligne 454 :
 
===Génération du fichier des utilisateurs dont le solde est à importer===
 
===Génération du fichier des utilisateurs dont le solde est à importer===
 
Le fichier créé ci-dessous permet d'effectuer un import par numéro d'id OpenFlyers. Cette méthode garantie l'absence d'erreur d'import qui serait causée par une homonymie.
 
Le fichier créé ci-dessous permet d'effectuer un import par numéro d'id OpenFlyers. Cette méthode garantie l'absence d'erreur d'import qui serait causée par une homonymie.
*Créer le rapport suivant :
+
*Créer le rapport ''Liste des utilisateurs pour import du solde'' suivant :
 
<sql>SELECT person.id AS idopenflyers, person.last_name, person.first_name, account_type.name AS account_type_name,
 
<sql>SELECT person.id AS idopenflyers, person.last_name, person.first_name, account_type.name AS account_type_name,
 
sumAccountEntry(account.id, '$endDateAccount') AS balance
 
sumAccountEntry(account.id, '$endDateAccount') AS balance
Ligne 400 : Ligne 466 :
  
 
===Utilisation de l'import de mise à jour des soldes des comptes Clients via écritures comptable===
 
===Utilisation de l'import de mise à jour des soldes des comptes Clients via écritures comptable===
 
+
*Exporter les soldes des comptes utilisateurs via le rapport ''[[#Génération_du_fichier_des_utilisateurs_dont_le_solde_est_à_importer|Liste des utilisateurs pour import du solde]]''
Dans '''Admin > Utilisateurs > Imports > Mise à jour des soldes des comptes Clients via écritures comptable''' :
+
*Mettre les bonnes valeurs de solde pour les comptes utilisateurs avec un tableur.
 +
Attention : si les utilisateurs disposent de plusieurs comptes, il faut travailler sur un seul type de compte à la fois en [[Trucs et astuces#Afficher_uniquement_un_certain_type_de_lignes|filtrant la colonne des types de compte]].
 +
Attention bis : l'import génère des écritures comptables à une date données qui vont venir s'ajouter aux écritures (et donc au solde existant). Dans le cas où les soldes initiaux sont à 0, il n'y a pas de difficulté : la valeur à importer de chaque compte doit correspondre au solde souhaité. Par contre, si les soldes initiaux ne sont pas à 0 ou s'il faut utiliser l'import pour corriger les effets de mauvaises écritures comptables qui ont été générées dans OpenFlyers, alors les valeurs à importer doivent être calculées de sorte à être la différence de la valeur entre le solde souhaité et le solde constaté.
 +
*[[Trucs et astuces#Exporter_au_format_csv_pour_OpenFlyers|Sauvegarder le fichier sous format csv avec la mise en forme adaptée pour OpenFlyers]].
 +
*Vérifier avec un éditeur de texte (notepad par exemple) que le fichier ne contient que les lignes d'un type de compte donné
 +
*Aller dans '''Admin > Utilisateurs > Imports > Créer/Modifier'''
 +
*Cliquer sur l'icône d'édition symbolisant un crayon de la ligne '''Mise à jour des soldes des comptes CLIENTS par écritures comptables'''
 +
*Modifier le contenu du champ '''$accountTypeId (Type de compte à mettre à jour)''' pour qu'il corresponde au type de compte que l'on souhaite importer
 +
*Modifier le contenu du champ '''$compensationAccountId (Compte de contre-partie)''' pour qu'il corresponde au compte de contre-partie correspondant
 +
*Modifier le contenu du champ '''$flowDate (Date de flux)''' pour qu'il corresponde à la date comptable souhaitée
 +
*Cliquer sur le bouton '''Valider'''
 +
'''Recommandation''' : Avant d'importer pour de vrai des soldes de comptes et ainsi de générer des écritures comptables, il est recommandé de [[Modèle-commercial-et-compte-client-OpenFlyers#Plateforme-supplémentaire-de-test|dupliquer la plateforme vers la plateforme bac à sable]] après avoir effectué le paramétrage ci-dessus et avant de réaliser l'import ci-dessous et de réaliser l'import d'abord une première fois sur la plateforme bac à sable afin de s'assurer que le résultat obtenu est conforme au résultat souhaité.
 +
*Aller dans '''Admin > Utilisateurs > Imports > Mise à jour des soldes des comptes Clients via écritures comptable'''
 
*Sélectionner '''UTF-8''' dans le champ '''Jeu de caractère CSV par défaut'''
 
*Sélectionner '''UTF-8''' dans le champ '''Jeu de caractère CSV par défaut'''
*Importer le fichier CSV pour détecter qui doit être remis à jour
+
*Importer le fichier CSV
*Sélectionner les utilisateurs désirés
+
Toutes les lignes doivent apparaitre en vert
 +
*Désélectionner les lignes que vous ne souhaitez pas importer
 
*Cliquer sur '''Mettre à jour''' pour déclencher la mise à jour des comptes Clients des utilisateurs désirés
 
*Cliquer sur '''Mettre à jour''' pour déclencher la mise à jour des comptes Clients des utilisateurs désirés
 +
'''Attention''' : cette mise à jour est longue et peut prendre 2 à 3 minutes. Il se peut également qu'un bug de rafraichissement ne vous permette pas de constater que l'import est terminé. Il faut donc patienter au moins 2 minutes et ensuite tenter d'afficher la liste des comptes utilisateurs dans '''Comptes > Utilisateurs''' ou encore d'aller voir le compte de contre-partie.
 +
 +
Une fois l'import effectué, il faut vérifier que les opérations comptables se sont bien réalisées en allant consulter le compte de contre-partie.
 +
 +
Si un problème est apparu il est tout à fait possible de supprimer les écritures comptables tant qu'elles n'ont pas été validées.
  
 
===Vérification finale===
 
===Vérification finale===
 
*Dans le fichier Excel, faire la somme des soldes de tous les comptes importés et vérifier que cela correspond avec le solde du compte "Report à nouveau" dans '''Comptes > Lister les comptes > Bilan'''.
 
*Dans le fichier Excel, faire la somme des soldes de tous les comptes importés et vérifier que cela correspond avec le solde du compte "Report à nouveau" dans '''Comptes > Lister les comptes > Bilan'''.

Version actuelle en date du 4 avril 2016 à 10:59

Sommaire

Présentation

Cette fonction est disponible à partir de la version 3.0.

Le module d'import permet d'importer et de synchroniser de manière automatique la table des utilisateurs OpenFlyers ainsi que leurs validités à partir d'un fichier externe.

/!\ : Le module d'import n'est pas fonctionnel sous le navigateur Internet Explorer. Il est recommandé d'utiliser un autre navigateur pour utiliser ce module.

Ce module trouve notamment son application pour la synchronisation avec le fichier SMILE de la Fédération Française Aéronautique.

Ce module est décomposé en 3 étapes :

  1. Le rapprochement qui permet de faire correspondre les lignes d'un fichier à importer avec la base de données OpenFlyers
  2. Le test de mise à jour qui permet de déterminer, pour les lignes rapprochées, si une mise à jour de la ligne correspondante dans la base OpenFlyers est préconisée ou non
  3. La mise à jour qui effectue des requêtes déterminées dans la base OpenFlyers pour les lignes qui ont été déterminées comme devant être mises à jour

Le processus d'import peut fonctionner de façon complétement automatique (via une synchronisation journalière à partir d'une source de données extérieure accessible via internet), de façon semi-automatique (la récupération des données est transparente et déclenchée par une simple validation sur un bouton, puis un tableau liste les lignes à synchroniser et une nouvelle validation permet de déclencher la mise à jour) ou de façon complétement manuellement (la récupération des données se fait alors par upload manuel et les lignes à mettre à jour peuvent être sélectionner ou dé-sélectionner manuellement).

Il est vivement conseiller d'éditer son fichier d'import pour remplacer tous les caractères accentués et les apostrophes présents dans les noms des colonnes.

Formule de rapprochement

Le but est de trouver les utilisateurs se trouvant dans la base de données ayant des données semblables à ceux se trouvant dans le fichier. Nous allons donc compléter une formule de rapprochement pour effectuer cela.

Nous allons faire un rapprochement sur le nom et le prénom par une égalité. La formule de rapprochement est donc :

person::stripChars(CONCAT(#nom,#prenom)) = stripChars(CONCAT(person.last_name,person.first_name))
  • #nom correspond au champ "Nom" du fichier.
    1. prenom correspond au champ "Prénom" du fichier.

Ces variables sont affichées sur le tableau, en seconde ligne d'entête.

stripChars est une fonction permettant de retirer tout ce qui est tiret et espace d'un nom afin de faire un meilleur rapprochement entre le fichier et la base de données.

Lors d'un import, des lignes rouges du tableau généré passeront en orange. Les lignes oranges représenteront les utilisateurs rapprochés.

Formule de test de mise à jour

Une fois que nous avons les utilisateurs rapprochés, nous allons appliquer un autre filtrage : nous voulons les utilisateurs ayant une validité X qui a expiré. Il est possible d'utiliser des variables comme $validityId (en supposant que la variable $validityId a été précédemment créée et qu'une valeur lui a été affecté).

La requête de filtrage, appelée formule de test de mise à jour, est ainsi :

SELECT person.id, IF(validity.expire_date > '2010-12-31',1,0)
FROM person
LEFT JOIN validity
ON validity.person_id=person.id
WHERE validity.validity_type_id=$validityId

Le résultat fera rafraîchir le tableau généré. Des lignes oranges passeront en couleur verte et seront automatiquement cochées. Ces lignes vertes représentent les utilisateurs dont leur validité a expirée.

Ainsi, nous nous retrouvons avec 3 couleurs possibles qui correspondent à un code couleur.

Formule de mise à jour

Ensuite, nous allons mettre à jour les validités de ces utilisateurs. Nous laissons le tableau comme tel, nous ne cocherons ou décocherons aucune ligne. Seules les lignes vertes seront mises à jour (si une ligne orange est cochée manuellement, elle passera en verte pour indiquer quelle sera affectée par la mise à jour).

Nous supposons que la variable $validityId a déjà été créée et qu'elle correspond à la validité "FFA". La variable $person_id prendra l'id de l'utilisateur en base (c'est une variable prédéfinie dans notre moteur). La formule de mise à jour qui va être utilisée est :

INSERT INTO `validity` (`person_id`, `validity_type_id`, `expire_date`, `ident_value`)
VALUES ('$person_id', '$validityId', '2011-12-31', '#nlicence')
ON DUPLICATE KEY UPDATE `expire_date` = '2011-12-31', `ident_value` = #nlicence;

Cette requête va mettre à jour la date d'expiration de la validité X choisie des utilisateurs (représentés en ligne verte sur le tableau). Si un utilisateur ne possédait pas de validité X, celle-ci lui sera créée en lui complétant le numéro de licence (variable #nlicence, la valeur est récupérée depuis le tableau généré).

Un retour de message alertera du nombre de validités mises à jour : ce nombre sera de 0 au minimum et du nombre de lignes vertes cochées au maximum. S'il y avait 5 lignes vertes et que l'alerte nous indique que 4 validités seulement ont été mises à jour, cela signifie que la validité d'un utilisateur n'avait pas besoin d'être remise à jour.

Tableau de synchronisation

Code couleur

Les lignes du tableau de synchronisation peuvent avoir 3 couleurs :

  • vert-sélectionnée par défaut : rapprochement effectué, mise à jour recommandée
  • rouge-non sélectionnable : rapprochement impossible : impossible d'associer la ligne du fichier importé avec une entrée utilisateur en base de données
  • orange-sélectionnable mais non sélectionnée par défaut : rapprochement effectué, mais mise à jour non préconisée (l'utilisateur est déjà à jour)

Mise en place de requêtes d'import pour SMILE

Nous partons sur la base d'un fichier CSV à importer qui a cette structure :

"N° licence";"Date de saisie";"Code renouvellement";"Date renouvellement";"Nom";"Prénom";"Date de naissance";"Sexe";
417965;02/01/10;"OK-RAC";02/01/10;"DUPONT";"CHRISTOPHE";26/02/70;"M";

Le but est de mettre à jour la validité "Licence FFA" que nous allons créer pour chacun des utilisateurs renseignés dans ce fichier.

La synchronisation peut s'opérer de 2 façons possibles selon le processus défini au sein de la structure aéronautique :

  1. Si les adhérents paient directement la FFA (chèque à l'ordre de la FFA), alors aucun mouvement comptable n'est à enregistrer dans OpenFlyers. Il en est de même, si OpenFlyers ne gère pas la comptabilité de la structure aéronautique. Dans ces cas de figure, la synchronisation consiste simplement à mettre à jour la validité FFA.
  2. Si les adhérents paient leur cotisation FFA à la structure aéronautique (chèque à l'ordre de la structure aéronautique) et que la gestion des comptes pilotes est faite dans OpenFlyers, alors il faut enregistrer en comptabilité les mouvements permettant de suivre les flux financiers.

Dans les 2 cas, certaine opération ne change pas : la "prise de licence FFA" devra être saisie dans SMILE. Cette opération peut être soit réalisée par l'adhérent lui-même soit centralisée par la structure aéronautique (auquel cas, les adhérents doivent remplir un formulaire papier).

De plus, afin de mieux sécuriser le rapprochement des bases de données, nous préconisons d'effectuer un premier rapprochement sur les couples (nom, prénom) afin de générer les validités "licence FFA" puis d'effectuer les opérations de mise à jour non plus sur ces couples mais sur le numéro de licence FFA.

Actions communes

Création de la validité "licence FFA"

Dans Admin > Types de validités :

  • En bas de la page, dans le champ texte à gauche du bouton Ajouter un type de validité, renseigner "Licence FFA"
  • Cliquer sur le bouton Ajouter un type de validité
  • Activer pour ce type de validité l'option Soumise à échéance (permet de renseigner la date butoir de cette validité)
  • Activer pour ce type de validité l'option Gestion du code identifiant (permet de renseigner le numéro de licence FFA)
  • Éventuellement activer Validité bloquante pour la saisie des vols (intéressant uniquement en mode ouverture+fermeture de vols)

Création des autres "validités FFA"

Dans le cas où le but est uniquement de contrôler que l'adhérent est à jour de sa cotisation, il n'est pas indispensable de créer les autres "validités FFA". C'est néanmoins recommandé car cela permet d'avoir une visibilité aussi bien pour l'adhérent que pour les gestionnaires sur ces éléments.

Donc, dans le cas où on crée les autres "validités FFA", il faut répéter l'opération de création de "licence FFA" pour les validités suivantes mais sans activer la Gestion du code identifiant :

  • Assurance IA FFA de base
  • Abonnement INFO-PILOTE
  • Assurance FFA Plus option A
  • Assurance FFA Plus option B
  • RC Instructeurs FI-FE
  • Assurance individuelle FI-FE

Création du champ additionnel "licenceFFAId"

Dans Admin > Utilisateurs > Imports > Champ(s) additionnel(s) :

  • Renseigner Nom (le champ précédé d'un $) avec "licenceFFAId"
  • Renseigner Intitulé avec "licence FFA"
  • Renseigner Type de valeur avec dbObject::ValidityType
  • Cliquer sur Ajouter

Création des autres champs additionnels "FFA"

Dans le cas où les autres types de validités FFA ont été créées, il faut alors également créer les autre champs additionnels suivants sur le modèle du champ additionnel "licenceFFAId" :

  • AssuranceIAFFAId
  • AbonnementIPId
  • AssuranceFFAAId
  • AssuranceFFABId
  • RCInstructeurId
  • AIInstructeurId

Paramétrage des imports des numéros de licence FFA

Dans Admin > Utilisateurs > Imports > Créer/Modifier :

  • Cliquer sur Ajouter
  • Mettre comme intitulé "Import des numéros de licence FFA"
  • Mettre comme formule de rapprochement :
person::stripChars(CONCAT(#nom,#prenom)) = stripChars(CONCAT(person.last_name,person.first_name))
SELECT person.id, 1
FROM person
LEFT JOIN merge_data ON person.id=merge_data.person_id
LEFT JOIN validity ON merge_data.person_id=validity.person_id AND validity.validity_type_id=$licenceFFAId
WHERE merge_data.person_id IS NOT NULL
INSERT INTO validity (person_id, validity_type_id, ident_value, expire_date )
VALUES ('$person_id', '$licenceFFAId', '#nlicence', '2010-12-31')
ON DUPLICATE KEY UPDATE `ident_value` = '#nlicence';
  • Sélectionner Licence FFA pour $licenceFFAId (licence FFA)
  • Répéter cette mise en correspondance pour les autres champs
  • Valider

Import des numéros de licence FFA

  • Exporter côté SMILE l'exercice de l'année.
  • Retourner dans OpenFlyers
  • Aller dans Admin > Utilisateurs > Imports > Import des numéros de licence FFA
  • Sélectionner ISO-8859-1 dans le champ Jeu de caractère CSV par défaut
  • Cliquer sur l'icône Importer à droite du champ
  • Sélectionner le fichier précédemment exporté depuis SMILE

ImportFFASelect.png

  • Patienter une quinzaine de secondes (une icône animée aide à cela)
  • Lorsque le tableau s'affiche (avec normalement quasiment que des lignes vertes), noter les noms des personnes sur les lignes rouges (il s'agit de personnes qui n'ont pas pu être rapprochées: écriture du nom ou du prénom différemment) et pour lesquelles il faudra justement créer à la main la validité "licence FFA" pour les rapprochements ultérieurs

LicenceFFAList.png

  • Aller tout en bas du tableau et cliquer sur le bouton Mettre à jour
  • Il ne reste plus qu'à aller dans Utilisateurs > Types de validités, cliquer sur l'icône Liste du type de validité "Licence FFA" pour vérifier que tout c'est bien passé : chaque adhérent doit disposer maintenant d'une validité "licence FFA" avec son numéro de licence FFA et une date d'échéance au 31/12/2010.

Exporter depuis SMILE

  • Se connecter à SMILE en tant que "club"
  • Aller dans Exportation de données > liste complète des licenciés
  • Cocher Licenciés récents
  • Cliquer sur l'icône Excel
  • Puis, depuis OpenOffice ou Excel, enregistrer l'export excel sous csv avec comme séparateur ";"

Mise à jour simple de la validité "licence FFA"

Les actions communes doivent avoir été réalisées au préalable.

Synchronisation de la validité "licence FFA" et génération des écritures comptables associées

Le but est de facturer l'achat et/ou le renouvellement de la validité "Licence FFA" pour chacun des adhérents concernés en plus de la mise à jour de leur validité "licence FFA".

Les actions communes doivent avoir été réalisées au préalable.

Procédure de création de tarification

Création du compte fournisseur "FFA"

Dans Admin > Comptes > Lister les comptes > Comptes fournisseur :

  • Renseigner Nom avec "FFA"
  • Renseigner Compte d'export avec "401FFA"
  • Cliquer sur Ajouter

Création des types de vente

Dans Admin > Ventes > Types de vente, créer le type de vente "Licence FFA" :

  • Renseigner Nom avec "Licence FFA"
  • Laisser Unité sur Sans unité
  • Laisser Echelle de précision sur 0
  • Ne pas activer l'option Vente libre : cela donnerait la possibilité aux adhérents d'acheter directement la validité "licence FFA" par le biais d'OpenFlyers alors qu'il faut forcément faire une saisie dans SMILE pour que celle-ci soit prise en compte par la FFA.
  • Cliquer sur Ajouter
  • Répéter cette opération de création avec les types de vente suivant :
    • Abonnement INFO-PILOTE
    • Assurance FFA Plus option A
    • Assurance FFA Plus option B
    • Assurance IA FFA de base
    • Assurance individuelle FI-FE
    • RC Instructeurs FI-FE

Création des ventes

  • Si cela n'est pas fait, activer le droit vente pour tous pour le profil utilisé pour cette mise en place

Dans Admin > Ventes > Tarification des ventes, créer la vente "Licence FFA" :

  • Cliquer sur Ajouter une ligne de tarification
  • Renseigner Nom par "Licence"
  • Renseigner Formule par le prix tarifaire. Par exemple, 1 (la valeur ne sera pas prise en compte dans l'import : c'est le tarif indiqué dans le fichier csv qui sera utilisé)
  • Sélectionner "Licence FFA" dans Type de vente
  • Sélectionner Compte membre en Type de compte à débiter
  • Sélectionner Compte fournisseur en Type de compte à créditer puis choisir "FFA" en Compte fournisseur à créditer
  • Cliquer sur Valider
  • Répéter cette opération pour les ventes :
    • Assurance IA FFA
    • Abonnement INFO-PILOTE
    • Assurance FFA Option A
    • Assurance FFA Option B
    • RC Instructeurs FI-FE
    • Assurance Individuelle Instructeur

Création des ventes de validités

Dans Admin > Ventes > Validités à vendre, créer la vente de validité "Licence FFA" :

  • Renseigner Tarification avec "Licence"
  • Renseigner Validité avec "Licence FFA"
  • Renseigner Formule de création avec la date d'échéance à mettre par défaut lors de l'achat de la validité. Par exemple "2011-12-31" (format anglo-saxon)
  • Renseigner Formule de mise à jour avec la date d'échéance à mettre par défaut lors du renouvellement de validité. Par exemple "2011-12-31" (format anglo-saxon)
  • Cliquer sur Ajouter
  • Répéter cette opération pour les ventes de validités :
    • Assurance IA FFA
    • Abonnement INFO-PILOTE
    • Assurance FFA Option A
    • Assurance FFA Option B
    • RC Instructeurs FI-FE
    • Assurance Individuelle Instructeur

Une validité ne peut être associée qu'à une seule règle de tarification.

Création de l'import SMILE avec tarification

Dans Admin > Utilisateurs > Imports > Créer/Modifier :

  • Cliquer sur Ajouter
  • Mettre comme intitulé Import SMILE avec écritures comptables
  • Mettre comme formule de rapprochement :
validity::TRIM(LEADING '0' FROM #nlicence) = validity.ident_value 
SELECT person.id, IF(validity.expire_date < '2011-01-01' OR validity.expire_date IS NULL,1,0)
FROM person
LEFT JOIN validity ON validity.person_id=person.id
WHERE validity.validity_type_id=$licenceFFAId
UNION ALL
SELECT person.id, 1
FROM person
LEFT JOIN  validity ON validity.person_id=person.id AND validity_type_id=$licenceFFAId
WHERE validity_type_id IS NULL
CALL saleValidity($licenceFFAId, $person_id, '#lic');
CALL saleValidity($AssuranceIAFFAId, $person_id, '#assuranceiadebase');
CALL saleValidity($AbonnementIPId, $person_id, '#abonnementinfopilote');
CALL saleValidity($AssuranceFFAAId, $person_id, '#ffaplusoptionacapitalde50000');
CALL saleValidity($AssuranceFFABId, $person_id, '#ffaplusoptionbcapitalde100000');
CALL saleValidity($RCInstructeurId, $person_id, '#rcinstructeursfife');
CALL saleValidity($AIInstructeurId, $person_id, '#assuranceindividuellefife');
  • Sélectionner "Licence FFA" pour "$licenceFFAId (licence FFA)"
  • Répéter cette mise en correspondance pour les autres champs
  • Valider

Import de données

Mise au propre du fichier de données

Mettre au propre les données à importer avec un des logiciels suivant, LibreOffice, OpenOffice ou Excel :

  1. Supprimer les accents des titres de toutes les colonnes.
  2. Supprimer les colonnes vides.
  3. Remplacer les majuscules par des minuscules dans les titres.
  4. Dans toutes les cellules, supprimer les espaces malencontreusement ajoutés avant ou après les mots
  5. Rajouter un anti-slash "\" devant tous les apostrophes avec l'outil "rechercher/remplacer" du logiciel utilisé.
  6. Remplacer le signe & par un "et".
  7. Supprimer les apostrophes des titres.
    • Exemple de correction du format d'un titre : "Date d'expiration licence privée" devient "date expiration licence privee".
  8. Mettre les données de la colonne "nationalite" au format FR pour française, EN pour anglaise, etc.
  9. Mettre les données de la colonne "sexe" au format M pour masculin et F pour féminin.
  10. Ajouter les colonnes "etat" et "pays" si elles n'existent pas.
  11. Modifier les dates au format anglo-saxon "yyyy-MM-dd" en modifiant le format des cellules.
  12. Pour les colonnes correspondant à des validités, remplacer les données "Oui/Non" par des dates, dans la mesure du possible.
    • Pour une colonne "cotisation a jour", remplacer les "Oui" par la date d'échéance des cotisation de l'année en cours c'est à dire le 31 décembre de l'année N.
    • Remplacer les "Non" par le 31 décembre de l'année précédente N-1.
  13. Pour la colonne du solde des comptes pilotes, passer les cellules au format "Texte" puis rechercher et remplacer les virgules "," en points "."
  14. Enregistrer le fichier sous le format CSV et le dupliquer.
  15. Supprimer le caractère spécial & présent dans le document importé

Export du fichier de données avec OpenOffice

Une fois que l'onglet contenant les données à exporter est mis au propre :

  1. Garder l'onglet à exporter de visible
  2. Fichier > Enregistrer sous...
  3. Choisir le répertoire et le nom de fichier
  4. Sélectionner dans le champ Type "Texte CSV (.csv)"
  5. Cocher le champ Éditer les paramètres du filtre
  6. Cliquer sur le bouton Enregistrer
  7. Dans le champ Jeu de caractères, sélectionner "Unicode (UTF-8)"
  8. Dans le champ Séparateur de champs, sélectionner ";"
  9. Dans le champ Séparateur de texte, vider le contenu en laissant le focus sur l'ensemble des données et en utilisant la touche Suppr
  10. Cliquer sur le bouton OK.

Paramétrage des imports de champs additionnels

L'import suivant nécessite la construction d'un fichier csv avec les numéros d'identifiants OpenFlyers des utilisateurs obtenus grâce à l'export de la liste des utilisateurs.

On part sur la base d'un fichier CSV ayant cette structure :

idopenflyers;accidentcontact;phoneaccident
251;Mme DUPONT Myriam;01.02.03.04.05

Il nécessite également de connaitre les numéros de champs additionnels en base de données. Documenter comment récupérer les numéros de champs additionnels

Création de l'import de champs additionnels

Dans Admin > Utilisateurs > Imports > Créer/Modifier :

person::#idopenflyers=person.id
SELECT person.id, 1
FROM person
INSERT INTO `extra_field_content` (`category_id`, `extra_field_id`, `content`)
VALUES ('$person_id', '17', '#accidentcontact') # 17 is in this example the id of the extra field for "Personne à prévenir en cas d'accident"
ON DUPLICATE KEY UPDATE `content` = '#accidentcontact';
 
INSERT INTO `extra_field_content` (`category_id`, `extra_field_id`, `content`)
VALUES ('$person_id', '18', '#phoneaccident')
ON DUPLICATE KEY UPDATE `content` = '#phoneaccident';
  • Valider

Import des dates de naissance

L'import suivant nécessite la construction d'un fichier csv avec les numéros d'identifiants OpenFlyers des utilisateurs obtenus grâce à l'export de la liste des utilisateurs.

On part sur la base d'un fichier CSV ayant cette structure :

idopenflyers;naissance
251;1956-12-07

Création de l'import des dates de naissance

Dans Admin > Utilisateurs > Imports > Créer/Modifier :

person::#idopenflyers=person.id
SELECT person.id, 1
FROM person
UPDATE person SET birthdate="#naissance" WHERE person.id=$person_id;
  • Valider

Import des utilisateurs

/!\ Les soldes doivent être importés après validation. Les écritures effectuées en période de test seront par la suite supprimées. Il est donc inutile d'importer les soldes deux fois.

On part sur la base d'un fichier CSV ayant cette structure :

nom;prenom;email;adresse postale;code postal;ville;etat;pays;telephone personnel;telephone portable;telephone professionnel;sexe;date naissance;nationalite
Dupont;Jean;jean.dupont@test.fr;1 rue Qui Vive;33000;Bordeaux;;France;0102030406;0606060606;;M;1960-05-14;FR
Durand;Pierre;pierre.durand@test.fr;;;;;;;;;;;FR

Remarques :

  • Les utilisateurs qui vont s'afficher en vert sont ceux qui n'existaient pas. Ceux en orange représentent ceux déjà existant.
  • Lors de l'ajout d'un nouvel utilisateur, l'identifiant créé automatiquement correspondra à la première lettre du prénom suivi du nom. Tout élément non alphanumérique sera éliminé de l'identifiant.
  • Le mot de passe par défaut sera l'identifiant
  • Lors de la mise à jour d'un utilisateur, seulement les données de leur fiche personnelle seront mis à jour (e-mail, adresse, numéro de téléphone, sexe, date de naissance, nationalité). Puis le profil à affecter sera ajouté en plus de ceux déjà existant.
  • Dans le fichier d'import :
    • Le format du sexe doit correspondre à "M" pour un homme et "F" pour une femme.
    • La date de naissance doit être au format "AAAA-MM-JJ".

Création de l'import des utilisateurs

Dans Admin > Utilisateurs > Imports > Créer/Modifier :

person::stripChars(CONCAT(#nom,#prenom)) = stripChars(CONCAT(person.last_name,person.first_name))
SELECT id, 0
FROM person
UNION
SELECT null, 1
createOrUpdateUser($person_id, '#prenom', '#nom', '#email', '#adressepostale', '#codepostal', '#ville', '#etat', '#pays', '#telephonepersonnel', '#telephoneportable', '#telephoneprofessionnel', '#sexe', '#datenaissance', '#nationalite');
  • Valider

Utilisation de l'import des utilisateurs

Dans Admin > Utilisateurs > Imports > Import des utilisateurs :

  • Sélectionner UTF-8 dans le champ Jeu de caractère CSV par défaut
  • Importer le fichier CSV pour détecter qui doit être remis à jour
  • Sélectionner les utilisateurs désirés
  • Cliquer sur Mettre à jour pour déclencher l'ajout ou la mise à jour des utilisateurs désirés

Import des validités

  • Dans l'autre fichier CSV, laisser les colonnes correspondant aux validités et supprimer toutes les autres sauf "nom", "prenom" et "numero licence ffa". Ces colonnes servent de repère pour affecter les validités aux bonnes personnes.
  • Aller dans Utilisateurs > Import > Créer/Modifier et ajouter "Import des validités". Cet import sera modifié pour chaque validité importée.
  • Pour ajouter les formules, se reporter au paragraphe d'import de la licence FFA.
  • Sélectionner le Type de validité correspondant à la colonne importée, à la fin du formulaire.
  • Valider puis aller dans le menu Utilisateurs > Import > Import des validités précédemment créé.
  • Importer le fichier CSV et vérifier que toutes les lignes soient de couleur verte.

Mise à jour des soldes des comptes Clients par écritures comptables

L'objectif de cet import est de permettre la mise à jour des soldes des comptes "Clients" en y générant des écritures comptables :

  • Un mouvement va débiter le compte "Clients" si le solde est négatif ou va créditer le compte "Clients" si le solde est positif
  • Une écriture de contre-partie va s'effectuer sur un autre compte qui sera à définir. On prendra comme exemple un compte bilan "Report à nouveau"

On part sur la base d'un fichier CSV ayant cette structure :

ID Openflyers;nom;prenom;solde
4;Dupont;Jean;100
5;Durand;Pierre;-150

Création du compte de bilan "Report à nouveau"

Dans Admin > Comptes > Lister les comptes > Comptes bilan. Sur la dernière ligne vide :

  • Renseigner Nom avec "Report à nouveau"
  • Renseigner Compte d'export avec "110000"
  • Cliquer sur le bouton Ajouter

Création du champ additionnel "Type de compte à mettre à jour"

Dans Admin > Utilisateurs> Imports > Champ(s) additionnel(s) :

  • Renseigner Nom (le champ précédé d'un $) avec "accountTypeId"
  • Renseigner Intitulé avec "Type de compte à mettre à jour"
  • Renseigner Type de valeur avec dbObject::AccountType
  • Cliquer sur Ajouter

Création du champ additionnel "Compte de contre-partie"

Dans Admin > Utilisateurs> Imports > Champ(s) additionnel(s) :

  • Renseigner Nom (le champ précédé d'un $) avec "compensationAccountId"
  • Renseigner Intitulé avec "Compte de contre-partie"
  • Renseigner Type de valeur avec dbObject::Account
  • Cliquer sur Ajouter

Création du champ additionnel "Date de flux"

Dans Admin > Utilisateurs> Imports > Champ(s) additionnel(s) :

  • Renseigner Nom (le champ précédé d'un $) avec "flowDate"
  • Renseigner Intitulé avec "Date de flux"
  • Renseigner Type de valeur avec date
  • Cliquer sur Ajouter

Création de l'import de mise à jour des soldes des comptes Clients via écritures comptable

Il faut créer ou avoir créé au préalable :

Dans Admin > Utilisateurs > Imports > Créer/Modifier :

  • Cliquer sur Ajouter
  • Mettre comme intitulé "Mise à jour des soldes des comptes Clients"
  • Mettre comme formule de rapprochement :
  • Dans le cas où on rapproche par le nom et le prénom :
person::stripChars(CONCAT(#nom,#prenom)) = stripChars(CONCAT(person.last_name,person.first_name))
person::#idopenflyers=person.id
SELECT person.id, 1
FROM person
LEFT JOIN account ON (account.owner_id=person.id AND account.category=2)
WHERE account.account_type=$accountTypeId
createAccountEntries($person_id, $accountTypeId, $compensationAccountId, '#balance', '$flowDate');
  • Sélectionner le type de compte Clients pour le champ $accountTypeId (Type de compte à mettre à jour)
  • Sélectionner le compte bilan "Report à nouveau" pour le champ $compensationAccountId (Compte de contre-partie)
  • Sélectionner la date des écritures pour le champ $flowDate (Date de flux)
  • Valider

Génération du fichier des utilisateurs dont le solde est à importer

Le fichier créé ci-dessous permet d'effectuer un import par numéro d'id OpenFlyers. Cette méthode garantie l'absence d'erreur d'import qui serait causée par une homonymie.

  • Créer le rapport Liste des utilisateurs pour import du solde suivant :
SELECT person.id AS idopenflyers, person.last_name, person.first_name, account_type.name AS account_type_name,
sumAccountEntry(account.id, '$endDateAccount') AS balance
FROM account
LEFT JOIN account_type ON (account.account_type=account_type.id)
LEFT JOIN person ON (account.owner_id=person.id)
WHERE account.category=2 AND account.activated=1
ORDER BY last_name, first_name
  • Exporter le rapport au format CSV

Il faut alors remplacer la colonne balance par les à nouveaux à importer en gardant le même format.

Utilisation de l'import de mise à jour des soldes des comptes Clients via écritures comptable

Attention : si les utilisateurs disposent de plusieurs comptes, il faut travailler sur un seul type de compte à la fois en filtrant la colonne des types de compte. Attention bis : l'import génère des écritures comptables à une date données qui vont venir s'ajouter aux écritures (et donc au solde existant). Dans le cas où les soldes initiaux sont à 0, il n'y a pas de difficulté : la valeur à importer de chaque compte doit correspondre au solde souhaité. Par contre, si les soldes initiaux ne sont pas à 0 ou s'il faut utiliser l'import pour corriger les effets de mauvaises écritures comptables qui ont été générées dans OpenFlyers, alors les valeurs à importer doivent être calculées de sorte à être la différence de la valeur entre le solde souhaité et le solde constaté.

  • Sauvegarder le fichier sous format csv avec la mise en forme adaptée pour OpenFlyers.
  • Vérifier avec un éditeur de texte (notepad par exemple) que le fichier ne contient que les lignes d'un type de compte donné
  • Aller dans Admin > Utilisateurs > Imports > Créer/Modifier
  • Cliquer sur l'icône d'édition symbolisant un crayon de la ligne Mise à jour des soldes des comptes CLIENTS par écritures comptables
  • Modifier le contenu du champ $accountTypeId (Type de compte à mettre à jour) pour qu'il corresponde au type de compte que l'on souhaite importer
  • Modifier le contenu du champ $compensationAccountId (Compte de contre-partie) pour qu'il corresponde au compte de contre-partie correspondant
  • Modifier le contenu du champ $flowDate (Date de flux) pour qu'il corresponde à la date comptable souhaitée
  • Cliquer sur le bouton Valider

Recommandation : Avant d'importer pour de vrai des soldes de comptes et ainsi de générer des écritures comptables, il est recommandé de dupliquer la plateforme vers la plateforme bac à sable après avoir effectué le paramétrage ci-dessus et avant de réaliser l'import ci-dessous et de réaliser l'import d'abord une première fois sur la plateforme bac à sable afin de s'assurer que le résultat obtenu est conforme au résultat souhaité.

  • Aller dans Admin > Utilisateurs > Imports > Mise à jour des soldes des comptes Clients via écritures comptable
  • Sélectionner UTF-8 dans le champ Jeu de caractère CSV par défaut
  • Importer le fichier CSV

Toutes les lignes doivent apparaitre en vert

  • Désélectionner les lignes que vous ne souhaitez pas importer
  • Cliquer sur Mettre à jour pour déclencher la mise à jour des comptes Clients des utilisateurs désirés

Attention : cette mise à jour est longue et peut prendre 2 à 3 minutes. Il se peut également qu'un bug de rafraichissement ne vous permette pas de constater que l'import est terminé. Il faut donc patienter au moins 2 minutes et ensuite tenter d'afficher la liste des comptes utilisateurs dans Comptes > Utilisateurs ou encore d'aller voir le compte de contre-partie.

Une fois l'import effectué, il faut vérifier que les opérations comptables se sont bien réalisées en allant consulter le compte de contre-partie.

Si un problème est apparu il est tout à fait possible de supprimer les écritures comptables tant qu'elles n'ont pas été validées.

Vérification finale

  • Dans le fichier Excel, faire la somme des soldes de tous les comptes importés et vérifier que cela correspond avec le solde du compte "Report à nouveau" dans Comptes > Lister les comptes > Bilan.