THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Hello!

Je créé un nouveau post pour ne pas surcharger l'ancien concernant ce module d'import (qui fonctionne peut être encore sur les versions <= 2.2.1)

Je vais mettre au fur et à mesure l'avancement du module ici et voir avec vous si ça exploite tous les cas de figure.

Le fichier doit avoir les colonnes suivantes :

  • ref: La référence du produit

  • title: Le nom du produit

  • rub0: La rubrique de niveau 0 du produit

  • price: Le prix de la déclinaison

  • promoprice: Le prix promo de la déclinaison

  • stock: La quantité de la déclinaison

Il peut optionnellement avoir ces colonnes :

  • description: La description du produit

  • visible: 0 ou 1 si le produit est en ligne

  • weight: Le poids du produit

  • ean: Le code EAN du produit

  • is_new: 0 ou 1 si le produit est nouveau

  • is_promo: 0 ou 1 si le produit est en promo

  • rubX: Des sous-rubriques où X est le niveau de la rubrique

  • template: Le gabarit du produit

  • dec_X: Des déclinaisons où X est le nom de la déclinaison

  • decnom_X: Le nom de la déclinaison où X est le numéro de déclinaison correspondant (couplé avec decn_X)

  • decn_X: La valeur de la déclinaison où X est le numéro de déclinaison correspondant (couplé avec decnom_X)

  • brand: La marque du produit

  • caraclibre_X: Des caractéristiques libres où X est le nom de la caractéristique libre

  • carac_X: Des caractéristiques où X est le nom de la caractéristique

Je rajouterais sûrement des choses après comme les images, les fiches techniques etc...

Avancement

  • Utilisable depuis "Outils" / "Import"

  • Fichiers exploitables :

    • Pour l'instant uniquement CSV séparé par des points-virgules... (à voir par la suite si j'ai le courage de regarder pour d'autre format et si possible faire une détection)

  • Création des catégories/sous-catégories dans la bonne langue :

    1. Vérification si la catégorie existe avec le bon parent (selon rub0, rub1, rub2,...)

    2. Si non trouvée, vérification des erreurs de saisie des titres dans le fichier =>parcours de l'arborescence pour trouver une catégorie avec le bon parent qui a son titre le plus proche supérieur à 80% de match (je mettrais peut être plus après)

    3. Si non trouvée, on crée la catégorie avec le bon parent

Last edited by Elyos (10-03-2021 12:12:08)


Aide les autres, ils t'aideront en retour.

Offline


Tu peux t'inspirer du module ImportT1 qui te donnera la marche à suivre pour la manipulation des produits, catéfgories, caractéristiques, etc.


OpenStudio Toulouse

Offline


roadster31 wrote:

Tu peux t'inspirer du module ImportT1 qui te donnera la marche à suivre pour la manipulation des produits, catéfgories, caractéristiques, etc.

J'ai regardé mais je t'avouerais que j'ai pas tout saisi... donc je fais un premier jet (non optimisé) qui fonctionne et après on verra pour l'optimisation...

D'ailleurs si quelqu'un souhaite devenir testeur pour me remonter des bugs, idées, etc... Je suis preneur wink

Last edited by Elyos (11-03-2021 15:03:51)


Aide les autres, ils t'aideront en retour.

Offline


Bon ça avance... par contre j'ai des entrées vides dans ma table "product_sale_elements"

Pour chaque produit créé, j'ai une ligne vide dans cette table puis pour ce même produit, une ligne par référence...

C'est pas normal je pense... ?

$product = new Product();
$product->create($categoryId,$price,$currencyId,$taxRuleId,$weight,$quantity);
$product->setRef($ref);
$product->save();

Et normalement dans le core on a

public function create($defaultCategoryId, $basePrice, $priceCurrencyId, $taxRuleId, $baseWeight, $baseQuantity = 0)
    {
        ...

            // Create the default product sale element of this product
            $this->createProductSaleElement($con, $baseWeight, $basePrice, $basePrice, $priceCurrencyId, true, false, false, $baseQuantity);

            ...
    }

et

public function createProductSaleElement(ConnectionInterface $con, $weight, $basePrice, $salePrice, $currencyId, $isDefault, $isPromo = false, $isNew = false, $quantity = 0, $eanCode = '', $ref = false)
    {
        // Create an empty product sale element
        $saleElements = new ProductSaleElements();

        $saleElements
            ->setProduct($this)
            ->setRef($ref == false ? $this->getRef() : $ref)
            ..
        ;

        ...
    }

donc logiquement ça devrait récupérer la ref?!


Aide les autres, ils t'aideront en retour.

Offline


Ah bah non c'est normal vu que le produit n'a pas de "ref" à ce moment là...


Aide les autres, ils t'aideront en retour.

Offline


Test d'import de 18 produits avec image (http) et document (http)... error 500

Trop de choses à gérer ?!


Aide les autres, ils t'aideront en retour.

Offline


"error 500" c'est vague. Passe en mode développement et dis nous quelle est l'erreur qui s'affiche.


OpenStudio Toulouse

Offline


Bah justement je suis en dev... et y'a que ça ^^

Sinon j'en aurais dit plus big_smile


Aide les autres, ils t'aideront en retour.

Offline


Bon j'ai modifié mais j'ai un bug que je suis en train de corriger.

Mais du coup autre question :

ProductImageQuery::create()
				->filterByProductId($productId)
				->delete();

ça supprime de la base pas le fichier image ? Faut rajouter quelque chose pour supprimer l'image du serveur ?


Aide les autres, ils t'aideront en retour.

Offline


J'ai enlevé la partie de récupération de document (qui apparemment est trop gourmande...)

Mais je me retrouve avec une erreur :

Notice: A non well formed numeric value encountered

Et dans les logs je vois pas cette erreur... donc un peu compliqué de trouver d'où ça provient =/


Aide les autres, ils t'aideront en retour.

Offline


Elyos wrote:

J'ai enlevé la partie de récupération de document (qui apparemment est trop gourmande...)

Mais je me retrouve avec une erreur :

Notice: A non well formed numeric value encountered

Et dans les logs je vois pas cette erreur... donc un peu compliqué de trouver d'où ça provient =/

Prix formaté sur excel : "1 995,00" ... j'avais oublié de supprimer les espaces au traitement des prix/prix promo...


Aide les autres, ils t'aideront en retour.

Offline


Test sur 780 lignes de produits (déclinés ou non) : Avec import d'images et pas d'import documents... (via http)

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator to inform of the time the error occurred and of anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

ça se coupe au 95ème produit...

Last edited by Elyos (17-03-2021 15:03:49)


Aide les autres, ils t'aideront en retour.

Offline


Augmente le time-out de php (time_limit) et/ou de php-fpm, en fonction de ta configuration.


OpenStudio Toulouse

Offline


Avec

set_time_limit(0);
ini_set('max_execution_time', '0');

je passe à 110 lignes...


Aide les autres, ils t'aideront en retour.

Offline


A part couper le fichier manuellement, y'a pas moyen de le faire en code ? Lot par lot ?


Aide les autres, ils t'aideront en retour.

Offline


Sans les images on passe à 176 lignes et une erreur

Unable to execute INSERT statement [INSERT INTO `product` (`id`, `created_at`, `updated_at`, `version`, `version_created_at`) VALUES (:p0, :p1, :p2, :p3, :p4)]


Aide les autres, ils t'aideront en retour.

Offline


Bon bah je comprends pas... toujours

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator to inform of the time the error occurred and of anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Alors que j'ai découpé en 80 lignes...

[edit]... si je supprime la dernière ligne (vide) du csv le lot de 80 lignes fonctionne... [/edit]

Last edited by Elyos (17-03-2021 16:50:59)


Aide les autres, ils t'aideront en retour.

Offline


Fais le en ligne de commande, tu n'auras pas de problèmes pour traiter des gros fichiers

http://doc.thelia.net/en/documentation/ … e-commands-


OpenStudio Toulouse

Offline


roadster31 wrote:

Fais le en ligne de commande, tu n'auras pas de problèmes pour traiter des gros fichiers

http://doc.thelia.net/en/documentation/ … e-commands-

hum... j'ai pas tout compris là ^^'

Tu me suggères de lancer le script via une ligne de commande dans une console (genre putty) ?

Ou depuis mon module, lancer une ligne de commande ?

Parce que le but est tout de même de créer un module d'import depuis l'admin...

Désolé si je pose des questions bêtes...

Last edited by Elyos (17-03-2021 17:00:46)


Aide les autres, ils t'aideront en retour.

Offline


"genre putty". Mais ça n'a pas l'air de correspondre à ce que tu veux faire.

Si tu ne veux pas avoir de problèmes liés à la limitation du temps d'exécution, il te faut traiter ton fichier par lot, un peu comme le fait ImportT1, qui traite les produits par tranche de 10, et provoque un rechargement de la pager pour traiter les 10 suivants, et ainsi de suite.


OpenStudio Toulouse

Offline


Et c'est possible en passant par l'outil d'import ?


Aide les autres, ils t'aideront en retour.

Offline

Offline


Bon bah je recommence ^^'


Aide les autres, ils t'aideront en retour.

Offline


C'est normal qu'après avoir supprimé mon module je le vois toujours dans "Outils" => "Import" ?!

J'ai vidé tous les caches via l'admin mais c'est toujours là... (en mode dev ou non)


Aide les autres, ils t'aideront en retour.

Offline


Elyos wrote:

C'est normal qu'après avoir supprimé mon module je le vois toujours dans "Outils" => "Import" ?!

J'ai vidé tous les caches via l'admin mais c'est toujours là... (en mode dev ou non)


J'ai supprimé directement dans la bdd du coup...


Aide les autres, ils t'aideront en retour.