Jump to content

Big Data - Récupérer Des Données Sql En Csv Facilement


coeos.pro

Recommended Posts

Bonjour,

voici un module permettant de récupérer vos données via requetes SQL assez facilement.
Le module contient quelques requetes SQL par défaut, vous pouvez les modifier, les supprimer, en ajouter sans limites.

Les requêtes SQL peuvent utiliser ps_ (préfixe par défaut des tables, exemple ps_cart), ou _DB_PREFIX_ (conseillé, si vous souhaitez réutiliser les requetes SQL sur d'autres boutiques, _DB_PREFIX_cart donnera ps_cart par exemple), ou encore _PREFIX_ (si vous voulez faire plus court, _PREFIX_cart donnera ps_cart par exemple).

Voici le rendu des tables SQL :

post-95593-0-18056400-1454834958.jpg
Pour chaque requêtes vous pouvez sauvegarder une description afin de mieux vous y retrouver, les actions possibles sont : voir, sauvegarder, supprimer, voir le résultat sous forme sérialisée (voir l'image plus bas), voir le fichier CSV avec Excel.
 
Résultats que vous pouvez avoir sous différentes formes : 
post-95593-0-43482800-1455786743.jpg

Version 1.1.0 :

 


 
Et pour finir le zip :
v.1.0.0 : bigdata.zip  
Première version, testée sous 1.5 et 1.6. avec quelques requêtes SQL provenant de https://www.prestashop.com/forums/topic/155423-astuce-generer-automatiquement-vos-fichiers-csv-via-requete-sql/page-6?do=findComment&comment=2236793 et une que j'ai rajoutée permettant d'avoir les données complètes sur les commandes sur les 3 derniers mois


V.1.0.1 : v.1.0.1.bigdata.zip

 

  • ajout des traductions en Espagnol (par masqueunaweb.com),
  • ajout d'une nouvelle requête permettant d'avoir la liste des stocks des produits et déclinaisons,
  • j'ai changé _PREFIX_ dans les requêtes par _DB_PREFIX_ pour éviter les confusions, mais vous pouvez toujours utiliser _PREFIX_

V.1.1.0 : v.1.1.0.bigdata.zip

  • apparemment serialize peut quelque fois "bugguer", pour éviter tout problème je rajoute base64_encode, donc pour récupérer les données sérialisée il faudra rajouter base64_decode.
  • le tableau de résultat possède de nouvelles fonctionnalités : tri (en cliquant les les en-têtes de colonnes), recherche, pagination (si vous avez beaucoup de résultats)

 

v 1.1.1 : v.1.1.1.bigdata.zip

  • fixe un bug qui empêchait d'enregistrer plusieurs nouvelles requêtes à la suite (ceci obligeait à rafraîchir la page)

 

v 1.1.2 v.1.1.2.bigdata.zip

 

  • petite modification

v 1.1.3 v.1.1.3.bigdata.zip

  • compatible 1.6 & 1.7

 

v.1.2.1 : v.1.2.1.bigdata.zip

Pour prestashop 1.7, quelques modifications de présentation et un update pour https

 

Pour être sûre d'avoir la dernière version https://www.coeos.pro/fr/modules-prestashop/118-big-data-les-donnees-sql-en-csv-avec-facilite.html

 

 

  • Like 3
Link to comment
Share on other sites

Petite mise à jour du module v.1.0.1 :

  • ajout des traductions en Espagnol (par masqueunaweb.com),
  • ajout d'une nouvelle requête permettant d'avoir la liste des stocks des produits et déclinaisons,
  • j'ai changé _PREFIX_ dans les requêtes par _DB_PREFIX_ pour éviter les confusions, mais vous pouvez toujours utiliser _PREFIX_

 

Si vous avez des suggestions sur les fonctionnalités du module, n'hésitez surtout pas !

  • Like 1
Link to comment
Share on other sites

pour ma culture personnelle, il y a une icone premettant d'obtenir les données sous forme "sérialisées"..... c'est quoi ?

j'ai bien des "trucs" d'affichés mais je vois pas l'intéret....

 

 

 

Par exemple, pour la liste des catégories ça vous donne :

 

a:11:{i:0;a:9:{s:11:"id_category";s:1:"1";s:6:"active";s:1:"1";s:4:"Name";s:6:"Racine";s:6:"Parent";N;s:11:"description";s:0:"";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:6:"racine";}i:1;a:9:{s:11:"id_category";s:1:"2";s:6:"active";s:1:"1";s:4:"Name";s:7:"Accueil";s:6:"Parent";s:6:"Racine";s:11:"description";s:0:"";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:7:"accueil";}i:2;a:9:{s:11:"id_category";s:1:"3";s:6:"active";s:1:"1";s:4:"Name";s:6:"Femmes";s:6:"Parent";s:7:"Accueil";s:11:"description";s:273:"<p><strong>Vous trouverez ici toutes les collections mode pour femmes.</strong></p>
<p>Cette catégorie regroupe tous les basiques de votre garde-robe et bien plus encore :</p>
<p>chaussures, accessoires, T-shirts imprimés, robes élégantes et jeans pour femmes !</p>";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:6:"femmes";}i:3;a:9:{s:11:"id_category";s:1:"4";s:6:"active";s:1:"1";s:4:"Name";s:4:"Tops";s:6:"Parent";s:6:"Femmes";s:11:"description";s:200:"<p>Choisissez parmi une large sélection de T-shirts à manches courtes, longues ou 3/4, de tops, de débardeurs, de chemisiers et bien plus encore.</p>
<p>Trouvez la coupe qui vous va le mieux !</p>";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:4:"tops";}i:4;a:9:{s:11:"id_category";s:1:"5";s:6:"active";s:1:"1";s:4:"Name";s:8:"T-shirts";s:6:"Parent";s:4:"Tops";s:11:"description";s:150:"<p>Les must have de votre garde-robe : découvrez les divers modèles ainsi que les différentes</p>
<p>coupes et couleurs de notre collection !</p>";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:8:"t-shirts";}i:5;a:9:{s:11:"id_category";s:1:"6";s:6:"active";s:1:"0";s:4:"Name";s:4:"Tops";s:6:"Parent";s:4:"Tops";s:11:"description";s:67:"Choisissez le top qui vous va le mieux, parmi une large sélection.";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:3:"top";}i:6;a:9:{s:11:"id_category";s:1:"7";s:6:"active";s:1:"1";s:4:"Name";s:10:"Chemisiers";s:6:"Parent";s:4:"Tops";s:11:"description";s:79:"Coordonnez vos accessoires à vos chemisiers préférés, pour un look parfait.";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:10:"chemisiers";}i:7;a:9:{s:11:"id_category";s:1:"8";s:6:"active";s:1:"1";s:4:"Name";s:5:"Robes";s:6:"Parent";s:6:"Femmes";s:11:"description";s:200:"<p>Trouvez votre nouvelle pièce préférée parmi une large sélection de robes décontractées, d'été et de soirée !</p>
<p>Nous avons des robes pour tous les styles et toutes les occasions.</p>";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:5:"robes";}i:8;a:9:{s:11:"id_category";s:1:"9";s:6:"active";s:1:"1";s:4:"Name";s:21:"Robes décontractées";s:6:"Parent";s:5:"Robes";s:11:"description";s:142:"<p>Vous cherchez une robe pour la vie de tous les jours ? Découvrez</p>
<p>notre sélection de robes et trouvez celle qui vous convient.</p>";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:19:"robes-decontractees";}i:9;a:9:{s:11:"id_category";s:2:"10";s:6:"active";s:1:"1";s:4:"Name";s:16:"Robes de soirée";s:6:"Parent";s:5:"Robes";s:11:"description";s:56:"Trouvez la robe parfaite pour une soirée inoubliable !";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:12:"robes-soiree";}i:10;a:9:{s:11:"id_category";s:2:"11";s:6:"active";s:1:"1";s:4:"Name";s:13:"Robes d'été";s:6:"Parent";s:5:"Robes";s:11:"description";s:75:"Courte, longue, en soie ou imprimée, trouvez votre robe d'été idéale !";s:10:"meta_title";s:0:"";s:13:"meta_keywords";s:0:"";s:16:"meta_description";s:0:"";s:12:"link_rewrite";s:9:"robes-ete";[spam-filter]

Et ça sert à récupérer ces données utilisables en php, voir même depuis un autre site si vous le souhaitez.

En php il suffit de récupérer ce contenu et d'utiliser la fonction unserialize pour avoir les données sous forme array

Link to comment
Share on other sites

ok en fait c'est un problème d'affichage.

Si on ajoute 2 requêtes à la suite sans recharger la page, au moment du clic sur l'icone de sauvegarde de la 2ème, l'icone disparait, on voit la coche verte, puis l'icone de sauvegarde réapparait, mais il n'y a pas l'icone de suppression, ce qui me faisait croire que ce n'etait pas sauvegardé.

Alors qu'après recharge de la page, c'est bien le cas.

 

Je testais la 1.1.0, et pas de message d'erreur.

Link to comment
Share on other sites

Bonjour et merci pour ce module.

v1.0.1 installée et fonctionnelle sur PS1.6.1.4

Pour la V1.1.1 je n'ai plus les requests qui étaient fournies avec la 1.0.1 le fichier requests.txt de l'archive parait vérolé ?

 

Maintenant il va falloir que j'étudie les commandes PHP pour sortir les csv par langue afin de pouvoir les importer directement.

C'est pas gagné ;-)

Link to comment
Share on other sites

la version 1.0.1 a bien été désinstallée ET supprimée ?

Depuis la 1.1.0 les données sont sérialisée et encodée avec base64_encode, afin d'éviter certains bugs, si vous avez un fichier requests.txt avec vos requetes il suffit de l'encoder et normalement ça doit être bon.

Link to comment
Share on other sites

la version 1.0.1 a bien été désinstallée ET supprimée ?

Depuis la 1.1.0 les données sont sérialisée et encodée avec base64_encode, afin d'éviter certains bugs, si vous avez un fichier requests.txt avec vos requetes il suffit de l'encoder et normalement ça doit être bon.

Bonjour,

merci de votre retour rapide.

La première fois j'avais du faire supprimer directement. Là ça marche cette fois ci j'ai bien fait désinstaller PUIS supprimer.

  • Like 1
Link to comment
Share on other sites

Bonjour et merci pour ce  module

 

Je vais pouvoir passer outre les messages d'erreur bizarres du SQL Manager (alors que la requête est ok sur un autre outil)

Merci pour le retour ;)

 

si jamais vous avez des idées pour améliorer encore le module, n'hésitez pas ;)

Link to comment
Share on other sites

  • 2 weeks later...

Super module, merci pour votre travail. Moi j'ai un soucis avec les requêtes addresses et catégories, il va répéter la même ligne de résultats X fois pour un même identifiant. exemple, je vois dans le tableau qu'il m'a listé 15 chaque id de la même catégorie et dans les différentes langues. J'utilise la dernière version du module et la dernière version de prestashop.

 

Quelqu'uns à déjà eut ce soucis ?

 

En cherchant un peu plus loin que mon nez, je me suis aperçu que d'utiliser SELECT "DISTINCT" résolvait mon problème pour les adresses clients, mais pas pour mes catégories, même si je filtre les langues, celle-ci apparraissent quand même dans mon tableau.

post-335870-0-17753600-1457219274_thumb.png

Edited by wiwi57 (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...

Merci pour ce module, je teste cela tout de suite et posterais mon retour dans la foulée!

 

EDIT :

Donc J'ai installé le module et si j'ai bien compris cela permet surtout de faire des requêtes SQL plus facilement que depuis phpmyadmin. Donc je dirais que pour les non dev, il faudrait améliorer l'interface car concrétement il ne vont pas comprendre grand chose et veulent surtout quelque chose de simple et rapide.

Est-ce que vous avez pensé a proposer l'import de données également? J'ai l'impression que le système de Prestashop par défaut est déjà bien avancé donc c'est peut être pour cela que ce n'est pas dispo.

 

Si jamais vous avez besoin d'aide pour l'amélioration du plugin, je devrais avoir un peu de temps le mois prochain.

Edited by jcuenin (see edit history)
  • Like 1
Link to comment
Share on other sites

Merci pour le retour,

 

Effectivement mon module permet :

- d'éviter d'aller dans phpmyadmin

- de créer et sauvegarder ses propres requêtes SQL

- d'avoir un rendu plus intéressant qu'avec phpmyadmin (on peut trier les colonnes et rechercher un mot ou une valeur dans les résultats très simplement)

- d'exporter le résultat sous forme csv (pour Excel), mais aussi utilisable en php sous forme d'un array

 

Pour l'import de données, je ne le rajouterai pas, presta le fait déjà très bien par défaut comme vous le mentionnez, et mon module a vraiment pour but d'avoir le résultat d'une requête SQL lisible sous différentes formes (tableau, array, csv).

Link to comment
Share on other sites

  • 1 month later...

J'ai ce problème dans la version 1.1.1 (nouvelle installation):

 

 

 

logo.gif Requete SQL

save.png Sauvegardez les descriptions et requêtes SQL dans le fichier modules/bigdata/requests.txt

Erreur, veuillez recommencer...

 

Que je peux résoudre ce problème?

Merci

Link to comment
Share on other sites

  • 5 months later...

Bonjour, tout d'abord merci pour ce module qui m'est bien utile pour la préparation des commandes.

 

Je me permets de solliciter votre aide car je souhaite mettre en place une requette qui permette d'éditer sur une plage de temps données, le listing des commandes avec répartition par mode de paiement et une autre par transporteur

 

Malheureusement je ne me suis pas encore mis au SQL, j'ai bien essayé de partir du code de "Détail des commandes sur les 3 derniers mois, avec frais de livraisons, pour la boutique "1"" mais je ne parviens à rien.

 

Merci à ceux qui peuvent m'aider

 

bonne journée

Link to comment
Share on other sites

  • 2 months later...

Bonjour,

 

Merci beaucoup pour ce module bien utile.

 

Par contre je n'arrive pas à personnaliser une requête qui semble simple.

 

Je veux ajouter le nom de la catégorie de chaque produit (ou au moins l'identifiant de la catégorie) dans la requête n°10 du module v1.1.1 ci-dessous: Stocks de produits et déclinaisons, pour la boutique "1"

SELECT sa.id_product, pl.name, GROUP_CONCAT(al.name) as attributs, sa.quantity, sa.id_shop, sa.id_product_attribute
FROM _DB_PREFIX_product_lang pl
LEFT JOIN _DB_PREFIX_stock_available sa ON(pl.id_product = sa.id_product AND pl.id_lang=1)
LEFT JOIN _DB_PREFIX_product_attribute_combination pac ON(pac.id_product_attribute = sa.id_product_attribute)
LEFT JOIN _DB_PREFIX_attribute_lang al ON(al.id_attribute = pac.id_attribute AND al.id_lang=1)
WHERE pl.id_shop IN (1)
GROUP BY sa.id_product,sa.id_product_attribute
ORDER BY sa.quantity  ASC

quelqu'un pourrait-il m'aider ?

 

merci par avance

 

Link to comment
Share on other sites

genre ça :

SELECT sa.id_product, pl.name, GROUP_CONCAT(al.name) as attributs, sa.quantity, sa.id_shop, sa.id_product_attribute, cl.`name` AS `categorie`
FROM _DB_PREFIX_product_lang pl
LEFT JOIN _DB_PREFIX_stock_available sa ON(pl.id_product = sa.id_product AND pl.id_lang=1)
LEFT JOIN _DB_PREFIX_product_attribute_combination pac ON(pac.id_product_attribute = sa.id_product_attribute)
LEFT JOIN _DB_PREFIX_attribute_lang al ON(al.id_attribute = pac.id_attribute AND al.id_lang=1)
LEFT JOIN _DB_PREFIX_product p ON(p.id_product = pl.id_product)
LEFT JOIN _DB_PREFIX_category_lang cl ON(cl.`id_category` = p.`id_category_default`AND cl.`id_lang` = 1 AND cl.`id_shop`=1)
WHERE pl.id_shop IN (1)
GROUP BY sa.id_product,sa.id_product_attribute
ORDER BY sa.quantity  ASC
Link to comment
Share on other sites

  • 6 months later...

Bonjour,

 

J'ai créé avec votre module une requête sql afin de voir si des clients se sont inscrits via le bouton "Prévenez-moi lorsque le produit est disponible".

 

La requête simple est :

SELECT * FROM `ps_mailalert_customer_oos` WHERE 1

 

J'obtiens donc une liste:

SdflPYN.jpg

 

J'arrive maintenant à afficher le nom du produit avec la requête suivante:

SELECT m.customer_email, p.name FROM ps_mailalert_customer_oos m, ps_product_lang p

WHERE p.id_product = m.id_product

 

J'aimerai pouvoir afficher le nom de la déclinaison souhaitée mais je n'y arrive pas...

 

Si vous avez un semblant d'exemple, je suis preneur.

Je crois qu'il chercher dans 3 tables au moins.

 

Merci d'avance :)

Pilou

Link to comment
Share on other sites

essaye ceci, j'ai repris une requete qui était au dessus

SELECT sa.id_product, pl.name, GROUP_CONCAT(al.name) as attributs, sa.quantity, sa.id_shop, sa.id_product_attribute, cl.`name` AS `categorie`
FROM _DB_PREFIX_product_lang pl

LEFT JOIN _DB_PREFIX_stock_available sa ON(pl.id_product = sa.id_product AND pl.id_lang=1 AND sa.id_shop=1)
LEFT JOIN _DB_PREFIX_product_attribute_combination pac ON(pac.id_product_attribute = sa.id_product_attribute)
LEFT JOIN _DB_PREFIX_attribute_lang al ON(al.id_attribute = pac.id_attribute AND al.id_lang=1)
LEFT JOIN _DB_PREFIX_product p ON(p.id_product = pl.id_product)
LEFT JOIN _DB_PREFIX_category_lang cl ON(cl.`id_category` = p.`id_category_default`AND cl.`id_lang` = 1 AND cl.`id_shop`=1)
RIGHT JOIN `ps_mailalert_customer_oos`oos ON(oos.`id_product`= sa.id_product  AND oos.`id_product_attribute`=sa.id_product_attribute)
WHERE pl.id_shop =1

GROUP BY sa.id_product,sa.id_product_attribute
ORDER BY sa.quantity  ASC
  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Je découvre ce merveilleux module qui correspond exactement à ce que nous recherchions.
Bravo et merci pour cet excellent travail. :o
 
En réalité, nous cherchions à exporter les données de nos ventes pour générer facilement des factures.
Nous découvrons le "gestionnaire SQL" et ses paramétrages.
Le pré-paramétrages de certaines requêtes nous a permis de mieux comprendre comment tout cela fonctionne, merci :)

 
Nous nous sommes servi de la formule de la requête suivante "Détail des commandes sur les 3 derniers mois, avec frais de livraisons, pour la boutique "1"" pour réaliser notre requête personnalisée.

 

Tout fonctionne parfaitement, mais il nous manque encore une donnée que nous n'arrivons pas à générer.
 Pourriez-vous nous donner un petit coup de main?
 
Nous cherchons à ajouter l'information "transaction_id" de la table "(ps)_order_payment" dans notre requête

D'avance merci pour votre aide :)

Edited by Stick-IN (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...
  • 4 months later...

Bonjour Coeos.pro,

 

J'ai un p'tit soucis avec ton module.

Dans la table j'ai ceci:

LDoMpC9.jpg

Dans ton module, j'ai ce code que tu m'avais donné le 30 juillet:

SELECT m.customer_email, pl.name, GROUP_CONCAT(al.name) as attributs, cl.`name` AS `categorie`
FROM _DB_PREFIX_mailalert_customer_oos m, _DB_PREFIX_product_lang pl

LEFT JOIN _DB_PREFIX_stock_available sa ON(pl.id_product = sa.id_product AND pl.id_lang=2 AND sa.id_shop=1)
LEFT JOIN _DB_PREFIX_product_attribute_combination pac ON(pac.id_product_attribute = sa.id_product_attribute)
LEFT JOIN _DB_PREFIX_attribute_lang al ON(al.id_attribute = pac.id_attribute AND al.id_lang=2)
LEFT JOIN _DB_PREFIX_product p ON(p.id_product = pl.id_product)
LEFT JOIN _DB_PREFIX_category_lang cl ON(cl.`id_category` = p.`id_category_default`AND cl.`id_lang` = 2 AND cl.`id_shop`=1)
RIGHT JOIN `ps_mailalert_customer_oos`oos ON(oos.`id_product`= sa.id_product  AND oos.`id_product_attribute`=sa.id_product_attribute)
WHERE pl.id_shop =1

GROUP BY sa.id_product,sa.id_product_attribute
ORDER BY sa.quantity  ASC

Et j'obtiens ceci:

UF5W3Vo.jpg

 

As-tu une idée d'où ça coince stp ?
Merci d'avance
Pilou :)

Link to comment
Share on other sites

Bonjour Ceoes,

 

Merci de ta réponse.

La première table, c'est ps_mailalert_customer_oos

Les clients peuvent inscrire leur adresse email quand un article est en réassort ou en précommande et être averti lorsque l'article est de nouveau en stock.

J'aimerai au départ de cette table, avoir une liste des clients et l'article (et la déclinaison) qu'ils attendent.

(voir mon post du 31 juillet dernier ci-dessus)

Edited by P i l o u (see edit history)
Link to comment
Share on other sites

  • 11 months later...
  • 1 month later...

Bonjour,
j'aurais une question, étant "nulle" en code etc..
le module ne permettrait-il pas de "dire" ce qu'on veut et il va chercher dans les tables seul ? (je sais je suis exigeante)
car j'essai à tout prix de sortir une extraction des commande expédiés avec leur numéros suivis et je n'y arrive pas (cela me permet de relancer la poste le cas échéant)

 l'idée serait de faire ce type de requete

N° commande / Nom client / prénom / adresse / ref produit / date d'expédition / N° suivi / mode d'expédition 

Merci de votre écoute et de vos réponses

Edited by calindoudou (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Bonjour

Le module répond parfaitement pour un export propre de données notamment pour les quantités par produit/attribut.

Je  me demandais s'il était possible de mailer le fichier CSV dans la foulée ? genre

https://mon-site.com/modules/bigdata/ajax/seeresult.php?token=62d5860e9d2f7c51b2b92ab8d93245f3&amp;id=10&amp;csv=1&amp;mail([email protected],[email protected])

Hugues

Link to comment
Share on other sites

  • 3 months later...

Bonjour, 

J'ai une requête sql fonctionne sous mysqladmin pour télécharger une liste de commandes en fichier  CSV. Est-ce que vous pouvez me guider pour créer un bouton dans back office admin commande volet pour exécuter cette requête ?

Ma version prestashop est 1.25.

Merci d'avance.

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 year later...

Bonjour à tous,

Je viens de découvrir ce module qui est très pratique. Merci beaucoup à son concepteur !

Savez-vous comment faire pour générer un flux CSV ? L'idée est de pouvoir fournir un lien à une marketplace pour qu'elle se synchronise sur mon catalogue, principalement pour la gestion des stocks.

Merci.

Edited by Lynda (see edit history)
Link to comment
Share on other sites

  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...