Jump to content

Problema stato ordine con pagamento tramite bonifico bancario [RISOLTO]


b1000
 Share

Recommended Posts

Buonasera, 

ho notato un comportamento strano e problematico su prestashop (testo anche all'ultima release, 1.7.6.3).

Se ordino con bonifico bancario un prodotto CHE HO IN MAGAZZINO tutto funziona correttamente, l'ordine va nello stato "In attesa di pagamento con bonifico bancario", in questo modo posso processare MANUALMENTE l'ordine non appena ricevo il bonifico.

MA

per gli ordini di articoli non in magazzino (per i quali ho abilitato comunque la possibilità di ordinare, quando acquistati con bonifico bancario il sistema li processa saltando la mia autorizzazione.
in sostanza passa AUTOMATICAMENTE da "In attesa di pagamento con bonifico bancario" a "pagamento remoto accettato".

Qualche idea? qualcuno può provare a simulare il problema?

Ci sto impazzendo 😕

Edited by b1000 (see edit history)

Share this post


Link to post
Share on other sites

  • 2 months later...
On 1/29/2020 at 3:49 AM, b1000 said:

Buonasera, 

ho notato un comportamento strano e problematico su prestashop (testo anche all'ultima release, 1.7.6.3).

Se ordino con bonifico bancario un prodotto CHE HO IN MAGAZZINO tutto funziona correttamente, l'ordine va nello stato "In attesa di pagamento con bonifico bancario", in questo modo posso processare MANUALMENTE l'ordine non appena ricevo il bonifico.

MA

per gli ordini di articoli non in magazzino (per i quali ho abilitato comunque la possibilità di ordinare, quando acquistati con bonifico bancario il sistema li processa saltando la mia autorizzazione.
in sostanza passa AUTOMATICAMENTE da "In attesa di pagamento con bonifico bancario" a "pagamento remoto accettato".

Qualche idea? qualcuno può provare a simulare il problema?

Ci sto impazzendo 😕

Stesso identico problema.

Share this post


Link to post
Share on other sites

Ciao,

sì è vero, lo stato dell'ordine viene automaticamente cambiato da PS nel caso in cui sia abilitata la gestione del magazzino, sia possibile ordinare i prodotti non in magazzino e la quantità disponibile del prodotto sia < 0 (e questo succede indipendentemente dal metodo di pagamento da quello che si vede nel codice).

La funzione che vi interessa è validateOrder nella classe PaymentModule ed esattamente il codice che si trova dalla riga 551 (più o meno) e che inizia con il commento
// Switch to back order if needed

Commentando tutto l'if che segue questo commento si disabilita il cambio stato nel caso in cui la quantità sia <0.

Attenzione! Qualsiasi modifica ad una classe di Prestashop va fatta con la massima attenzione e usando un override, non modificando direttamente la classe in questione, altrimenti la modifica andrà persa al primo aggiornamento di PS (oltre al fatto che un qualsiasi errore potrebbe impallare completamente l'ecommerce).

Buona giornata,
Federica

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

  • 2 weeks later...

Ciao,

nulla, figurati! Sono contenta che abbiate risolto.
Magari metti [risolto] al titolo del thread così possiamo aiutare altri utenti che avessero lo stesso problema.

Buona giornata,
Federica

Share this post


Link to post
Share on other sites

5 hours ago, fedesib said:

Ciao,

nulla, figurati! Sono contenta che abbiate risolto.
Magari metti [risolto] al titolo del thread così possiamo aiutare altri utenti che avessero lo stesso problema.

Buona giornata,
Federica

Fatto, grazie ancora :)

Share this post


Link to post
Share on other sites

  • 11 months later...

Ciao Federica,

premetto che leggendo i tuoi post ho risolto diversi problemi.
Ho letto il tuo post e sto cercando di risolvere questo problema ma proprio non capisco cosa devo fare ;-P

Ho trovato il file PaymentModule.php
Qui di seguito riporto quello che mi compare al punto da te indicato.

// Set the order status
                    $new_history = new OrderHistory();
                    $new_history->id_order = (int) $order->id;
                    $new_history->changeIdOrderState((int) $id_order_state, $order, true);
                    $new_history->addWithemail(true, $extra_vars);

                    // Switch to back order if needed
                    if (Configuration::get('PS_STOCK_MANAGEMENT') &&
                            ($order_detail->getStockState() ||
                            $order_detail->product_quantity_in_stock < 0)) {
                        $history = new OrderHistory();
                        $history->id_order = (int) $order->id;
                        $history->changeIdOrderState(Configuration::get($order->hasBeenPaid() ? 'PS_OS_OUTOFSTOCK_PAID' : 'PS_OS_OUTOFSTOCK_UNPAID'), $order, true);
                        $history->addWithemail();
                    }


Saresti così gentile da dirmi cosa devo correggere?
Altra domanda banale da principiante: Per l'override mi basta copiare il file modificato nella cartella Override-Classes?

Grazie in anticipo.
Federico
 

Share this post


Link to post
Share on other sites

Ho fatto una prova sostituendo il codice presente nel file PaymentModule.php con il seguente e tutto sembra funzionare correttamente
// Switch to back order if needed
                   /* if (Configuration::get('PS_STOCK_MANAGEMENT') &&
                            ($order_detail->getStockState() ||
                            $order_detail->product_quantity_in_stock < 0)) {
                        $history = new OrderHistory();
                        $history->id_order = (int) $order->id;
                        $history->changeIdOrderState(Configuration::get($order->hasBeenPaid() ? 'PS_OS_OUTOFSTOCK_PAID' : 'PS_OS_OUTOFSTOCK_UNPAID'), $order, true);
                        $history->addWithemail();
                    }*/

Spero che questo suggerimento possa aiutare qualcuno.
Adesso mi manca lo step dell' Override per evitare che al prossimo aggiornamento la modifica venga persa. Se qualcuno sapesse darmi delle indicazioni gli e ne sarei grato.

 

Share this post


Link to post
Share on other sites

Ciao,

se stai lavorando con la versione 1.6 di PS ti basta creare un file nella cartella override/classes che instanzia una nuova classe così:

class PaymentModule extends PaymentModuleCore
{

... qui metti la funzione che fa l'override ...

public function validateOrder() {...}

}

Se stai lavorando con la versione 1.7 di PS devi sviluppare un modulo per fare l'override, non è più possibile farlo direttamente.
Istruzioni qui: https://devdocs.prestashop.com/1.7/modules/concepts/overrides/

Buona giornata,
Federica

Share this post


Link to post
Share on other sites

Buongiorno Federica,

grazie per la risposta.

Sto lavorando sulla 1.7. Ho letto la documentazione ma credo sia un pò fuori dalla mia portata! 🙂
Grazie comunque!

Federico

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More