Jump to content

Webservice et Hook application prestashop


Recommended Posts

bonjour,

 

j'ai récemment démarré la création d'une application pour un client sur Android et ios qui permet de faire des recherches de produits soit par le scan de l'ean par l'appareil photo soit par  plusieurs critères qui affiche une liste.

le détail permet ensuite de modifier le stock ou de le vérifier

Cette pré version est en test depuis 4 mois dans un circuit fermé ( pas de apple store ni google store  ). 

mais je rencontre un problème qui n'est pas issue du l'application.

je passe par le webservice Prestashop pour que l'appli soit totalement autonome

je me suis aperçue avec effrois en allant voir le code que le webservice ne déclenche pas les hook ... 

je ne comprend pas pourquoi les dev ne l'on jamais fait. ou alors quelque chose m'échappe. 

je précise que je ne suis pas un Grand pro de prestashop. je fais du DEV orienté solutions. 

et donc je fais bien des mises à jour de stock sans problème. mais le hook est nécessaire pour déclencher les mise à jour en marketplace.

 

la solution la plus rapide est de le déclencher dans le fichier WebserviceRequest.php  

dans la fonction saveEntityFromXml($successReturnCode) 

après le result 

forcément je n'aime pas ça.

soit je dois faire un module complet webservice ( et j'ai pas le temps )

ou il y a une autre solution que ne me saute pas aux yeux.

 

je mets des copies d'écrans pour que l'on visualise bien ce que fait cette partie de l"appli

Merci pour vos retours

 

Screenshot_20190627-133745_PrestaStock.jpg

Screenshot_20190627-133819_PrestaStock.jpg

Screenshot_20190627-134504_PrestaStock.jpg

Screenshot_20190627-134516_PrestaStock.jpg

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

Les webservices ont été développé par une team qui a été viré avant de finit (1.5)

Quand nous avons remonté ce genre d'incohérence on nous a répondu que ça resterai comme cela car avait été développé pour des grand compte des solutions qui "exploitaient" ces défauts.

Ta seule solutions est donc de faire une override pour faire une save() en plus sur ton object afin de lancer la chaine de hook.

Comme dirait Karl Lagerfeld, c'est moche, ça ne va avec rien mais ça peut sauver ton projet

Link to comment
Share on other sites

Merci Doekia pour ton retour Très rapide :)

Très intéressant l'histoire de team , je ne savais pas. 

j'imagine que ta réponse est effectivement la plus cohérente. et comme tu dis c'est moche. 

je vais voir de ce coté la alors dans un premier temps. 

sinon je verrais pour faire ma propre API en module quand j'aurais 1 semaine à perdre. c'est à dire pas de suite 

merci beaucoup :)

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

Bonjour Eolia

Merci du retour.

il est vrai que j'appelle stock_availables par le webservice .  je n'ai pas approfondi mais tu veux dire que si je fais un update product par le Webservice après le stock_availables je peux déclencher le hook ? 

Link to comment
Share on other sites

Dans stockAvailable:

    /**
     * @see ObjectModel::$webserviceParameters
     */
    protected $webserviceParameters = array(
        'fields' => array(
            'id_product' => array('xlink_resource' => 'products'),
            'id_product_attribute' => array('xlink_resource' => 'combinations'),
            'id_shop' => array('xlink_resource' => 'shops'),
            'id_shop_group' => array('xlink_resource' => 'shop_groups'),
        ),
        'hidden_fields' => array(
        ),
        'objectMethods' => array(
            'add' => 'addWs',
            'update' => 'updateWs',
        ),
    );

    /**
     * For a given {id_product, id_product_attribute and id_shop}, gets the stock available id associated
     *
     * @param int $id_product
     * @param int $id_product_attribute Optional
     * @param int $id_shop Optional
     * @return int
     */

    public function updateWs()
    {
        if ($this->depends_on_stock) {
            return WebserviceRequest::getInstance()->setError(500, Tools::displayError('You cannot update the available stock when it depends on stock.'), 133);
        }
        return $this->update();
    }

Si on trace update() on en arrive à setQuantity() et dans cette fonction:

            Hook::exec('actionUpdateQuantity',
                array(
                    'id_product' => $id_product,
                    'id_product_attribute' => $id_product_attribute,
                    'quantity' => $stock_available->quantity
                )
            );

 

Link to comment
Share on other sites

ok oui je vois bien. j'ai fait le tour de certaines classes

mais je viens de voir que les mises à jour MarketPlace. se faisaient avec la comparaison de la date d 'update produit et la dernière date du Cron. l'update Stock ne doit pas changer la date date_upd  de product dans la base.  donc je vais faire un update product que de la date_up sur le webservice. ça me parait bon ? 

tu valides ? :)

merci

Link to comment
Share on other sites

Oui comme fait Prestashop ailleurs. La mise à jour du champ date_upd est assez...aléatoire dirons nous :) Suivant les champs modifiés, Prestashop décide de mettre à jour ou pas. Comme pour ce qui est loggué (dans Paramètres avancés -> logs).

Link to comment
Share on other sites

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...