Jump to content

Override GenerateReference dans un module


Recommended Posts

Bonjour,

 

J'ai un soucis concernant un override dans mon module de paiement.

Je dois relier une référence (int) avec la référence de prestashop.

j'ai donc crée dans mon module une classe Override/classes/order/Order.php avec dedans

<?php
 
class Order extends OrderCore
{
 
public static function generateReference()
{
    $last_id = Db::getInstance()->getValue('
        SELECT MAX(id_order)
        FROM '._DB_PREFIX_.'orders');
    return str_pad((int)$last_id, 9, '000000000', STR_PAD_LEFT);
}
 
?>
 
 
Comment puis-je faire ensuite pour que mon module à l'installation surcharge la classe Order?
 
Merci d'avance  :)
 
Link to comment
Share on other sites

Merci de ta réponse mais ça ne va pas être possible.
J'ai besoin d'avoir mon override directement dans mon module et non dans les fichiers de prestashop.

Si je veux installer ce module autre part, je ne veux pas a avoir une modification a faire sur le presta ;).

Link to comment
Share on other sites

Edit: j'avais posé une autre question que j'ai pu régler. il me reste l'override d'une classe via un module.

je suis ouvert à toutes propositions ! 

 

Edit2 : ha bah non ma deuxieme question est toujours d'actualité... 
Je dois trouver une solution pour changer l'id_order par un ID d'une API. 

J'ai effectué un Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'orders` SET id_order = '.$id_smoney.' WHERE id_order = '.(int)$order_id);

Cela fonctionne, sauf que dans la partie produit en backend, j'ai plus aucun produit de trouvé... donc les remboursement sont impossibles..

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

Je ne sais pas trop où tu en es mais pour copier des fichiers il y a des fonctions PHP pour ça.

Je viens de voir que dans la classe Tools il y a une fonction copy également.

A tester mais avec Tools::copy($source, $destination, null) ca devrait faire le taf

Link to comment
Share on other sites

Ok merci pour cet info, je vais tester ça dès que possible. :)

 

Par contre pour mon deuxième problème est plus urgent.
 

juste avant le validate Order : $this->module->validateOrder($cart_id, $status, $cart->getOrderTotal(), $module_name, $message, array(), $currency_id, false, $secure_key);

 

j'ai rajouté ça :

 

Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'orders` SET id_order = '.$id_smoney.' WHERE id_order = '.(int)$order_id);

 

J'ai besoin de changer l'id de base de prestashop par l'ID que le retour de l'api va me donner.

Le problème est, que ça a l'air de merder au niveau de la variable $cart.

Dans mon back-end quand je regarde ma commande, le produit n’apparaît pas + pas de facture etc etc. Pourtant l'id de la commande est bien la bonne ;.

En tout cas un grand merci pour ton aide :)

Link to comment
Share on other sites

Ca commence à devenir un peu obscure, dans le sens où je ne comprends pas tous les tenants et les aboutissants de ta problématique.

Une chose est sûr c'est qu'avec ta requête SQL tu ne modifies que la table "cart". Hors les produits d'une commande sont "attachés" à cette commande via la table "cart_products". Donc si tu modifies l'un tu dois modifier les autres aussi.

Et tu vas rencontrer plein de cas comme ça...

La table "order_carrier" indique à PS quel transporteur est associé à une commande par exemple.

"order_state" aussi pour les statuts de commande. Idem pour les vouchers...

Link to comment
Share on other sites

Damn, effectivement c'est une sacré usine :/. 

En faite, j'ai 2 id différents pour le même produit en ce moment.
l'order_ID de prestashop et l'id que l'api accepte.

J'ai besoin d'avoir une liaison entre cet api et le backend de prestashop au niveaux des commandes.
Je voulais donc changer l'id de prestashop (Bon apparemment c'est pas la meilleure solution...)

Je dois avoir cette liaison pour pouvoir faire un appel de l'api (via un bouton a coté de chaque produits) dans la partie commande pour effectuer un remboursement.

Je ne sais pas si j'ai été assez clair :/

j'utilise cette fonction pour récupérer l'order_id
 

public static function generateReference()
{
    $last_id = Db::getInstance()->getValue('
        SELECT MAX(id_order)
        FROM '._DB_PREFIX_.'orders');
 
    return str_pad((int)$last_id + 2, STR_PAD_LEFT);
 

}

Malheureusement, l'id_order n'est pas forcément le dernier ID. j'ai donc voulu récupérer l'order_id du cart 

 

$cart_id =  Context::getContext()->cart->id;
$cart = new Cart((int)$cart_id);
 

$order_id = Order::getOrderByCartId((int)$cart->id);
 

sauf que $order_id est null...

je n'arrive pas à comprendre quand est-ce que prestashop crée l'order_id.
 

 

Edited by piloop35 (see edit history)
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...