Fatture Magento

Come cancellare ordini, fatture e clienti

Vediamo come eliminare ordini, fatture e clienti rapidamente.
Molti clienti ci chiedono come cancellare tutti quegli ordini, fatture e utenti di prova creati per poter verificare che il negozio funzionasse al meglio, senza dover ricorrere alle numerose estensioni a pagamento.

Esiste un metodo rapido per compiere questa azione, una query da avviare sul nostro pannello database.

Colleghiamoci sul nostro database ed avviamo la seguente query:

SET FOREIGN_KEY_CHECKS=0; 
TRUNCATE `sales_flat_creditmemo`; 
TRUNCATE `sales_flat_creditmemo_comment`; 
TRUNCATE `sales_flat_creditmemo_grid`; 
TRUNCATE `sales_flat_creditmemo_item`; 
TRUNCATE `sales_flat_invoice`; 
TRUNCATE `sales_flat_invoice_comment`; 
TRUNCATE `sales_flat_invoice_grid`; 
TRUNCATE `sales_flat_invoice_item`; 
TRUNCATE `sales_flat_order`; 
TRUNCATE `sales_flat_order_address`; 
TRUNCATE `sales_flat_order_grid`; 
TRUNCATE `sales_flat_order_item`; 
TRUNCATE `sales_flat_order_payment`; 
TRUNCATE `sales_flat_order_status_history`; 
TRUNCATE `sales_flat_quote`; 
TRUNCATE `sales_flat_quote_address`; 
TRUNCATE `sales_flat_quote_address_item`; 
TRUNCATE `sales_flat_quote_item`; 
TRUNCATE `sales_flat_quote_item_option`; 
TRUNCATE `sales_flat_quote_payment`; 
TRUNCATE `sales_flat_quote_shipping_rate`; 
TRUNCATE `sales_flat_shipment`; 
TRUNCATE `sales_flat_shipment_comment`; 
TRUNCATE `sales_flat_shipment_grid`; 
TRUNCATE `sales_flat_shipment_item`; 
TRUNCATE `sales_flat_shipment_track`; 
TRUNCATE `sales_invoiced_aggregated`; 
TRUNCATE `sales_invoiced_aggregated_order`; 
TRUNCATE `sales_order_aggregated_created`; 
TRUNCATE `sendfriend_log`; 
TRUNCATE `tag`; 
TRUNCATE `tag_relation`; 
TRUNCATE `tag_summary`; 
TRUNCATE `wishlist`; 
TRUNCATE `log_quote`; 
TRUNCATE `report_event`;

ALTER TABLE `sales_flat_creditmemo` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_creditmemo_comment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_creditmemo_grid` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_creditmemo_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_invoice_comment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_shipment_comment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_shipment_track` AUTO_INCREMENT=1; 
ALTER TABLE `sales_invoiced_aggregated` AUTO_INCREMENT=1; 
ALTER TABLE `sales_invoiced_aggregated_order` AUTO_INCREMENT=1; 
ALTER TABLE `sales_order_aggregated_created` AUTO_INCREMENT=1; 
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1; 
ALTER TABLE `tag` AUTO_INCREMENT=1; 
ALTER TABLE `tag_relation` AUTO_INCREMENT=1; 
ALTER TABLE `tag_summary` AUTO_INCREMENT=1; 
ALTER TABLE `wishlist` AUTO_INCREMENT=1; 
ALTER TABLE `log_quote` AUTO_INCREMENT=1; 
ALTER TABLE `report_event` AUTO_INCREMENT=1;
 
SET FOREIGN_KEY_CHECKS=1;

-- eliminazione di tutti gli account cliente

TRUNCATE `customer_address_entity`;
TRUNCATE `customer_address_entity_datetime`;
TRUNCATE `customer_address_entity_decimal`;
TRUNCATE `customer_address_entity_int`;
TRUNCATE `customer_address_entity_text`;
TRUNCATE `customer_address_entity_varchar`;
TRUNCATE `customer_entity`;
TRUNCATE `customer_entity_datetime`;
TRUNCATE `customer_entity_decimal`;
TRUNCATE `customer_entity_int`;
TRUNCATE `customer_entity_text`;
TRUNCATE `customer_entity_varchar`;
TRUNCATE `log_customer`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;

ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `log_customer` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;
 
 -- reset dei contatori sullo store

TRUNCATE `eav_entity_store`;
ALTER TABLE  `eav_entity_store` AUTO_INCREMENT=1;
SET FOREIGN_KEY_CHECKS=1;

Fatto questo avremo non solo eliminato tutti quei dati di prova, ma avremo anche azzerato i contatori del nostro negozio, facendo ripartire da zero fatturazione, numero ordini e id utente.

  • Giovanni

    ciao, va bene questa operazione per Magento 1.7.0.2? E’ fattibile da non addetti ai lavori? Ho un sito online ancora non attivo ma che lo sarà subito dopo questa operazione di pulizia… copio e incollo tranquillamente o devo stare attento a qualcos’altro? Grazie in anticipo!

    • Emergento

      ciao giovanni,

      Si, questa operazione va benissimo per magento 1.7.0.2, ed è abbastanza semplice da eseguire, copia e incolla pure, ovviamente è sempre bene, prima di compiere qualsiasi operazione sul database, avere un backup; per una questione di buon senso! 😉

      • Giovanni

        Grazie! Ma le posso copincollare tutte di seguito così come sono o vanno inserite a gruppi secondo qualche criterio?

        • Giovanni

          ops… ho copincollato tutto ricevendo questo errore… che posso fare?

          Errore
          Query SQL:
          TRUNCATE `customer_address_entity` ;
          Messaggio di MySQL:

          #1701 – Cannot truncate a table referenced
          in a foreign key constraint
          (`dbgio_6TGF75d`.`customer_address_entity_decimal`, CONSTRAINT
          `FK_CSTR_ADDR_ENTT_DEC_ENTT_ID_CSTR_ADDR_ENTT_ENTT_ID` FOREIGN KEY
          (`entity_id`) REFERENCES `dbgio_6TGF75d`.`customer_addres)

          • Giovanni

            ok, mi rispondo da solo, magari può servire a qualcun altro su internet!

            Ho risolto così: 1) ho ripristinato il database di cui avevo eseguito preventivamente il backup, in cpanel che rende la cosa semplice anche ai non addetti ai lavori;
            2) ho scaricato un’estensione gratuita da Magento Connect (questa: ASPerience DeleteOrders) – mi permetto di postarla qui tanto non ha finalità commerciali – e ha funzionato perfettamente per cancellare tutti gli ordini;
            3) ho cancellato manualmente tutti i clienti “di prova” dall’apposita funzione di Magento 1.7.0.2 nel backend
            4) ho DOVUTO azzerare le numerazioni di fatture/note credito/numero ordine visto che l’estensione suddetta non lo fa e l’ho fatto inserendo nel SQL di phpMyAdim solo le ultime 3 righe del tuo post (GRAZIE!), che ripeto qui per chi leggerà queste mie righe:

            TRUNCATE `eav_entity_store`;
            ALTER TABLE `eav_entity_store` AUTO_INCREMENT=1;
            SET FOREIGN_KEY_CHECKS=1;

            Il tutto ha funzionato perfettamente con Magento 1.7.0.2, buon lavoro!

          • Antonino Bonumore

            grazie giovanni per la dritta, eseguendo nuovi ordini è tutto corretto (numerazioni azzerate e nessun errore in backend)? ti chiedo perchè è una cosa piuttosto frequente con questi moduli che cancellano gli ordini, grazie

          • Giovanni

            Grazie Antonino, in effetti ad un primo test è andato tutto benissimo: acquisto andato a buon fine con pagamento in sandbox PayPal, fatture e note credito che ripartono da 1 ecc… nessun errore in backend.
            Ora su tuo avviso ho rifatto la stessa procedura, simulando quindi di essere un cliente, ma ottengo questo messaggio all’atto del pagamento con gateway paypal (sempre sandbox):
            PayPal gateway ha rifiutato la richiesta. Payment has already been made for this InvoiceID (#10412: Duplicate invoice).
            A questo punto è meglio indagare… qualche dritta da parte tua?

          • Antonino Bonumore

            Salve Giovanni,
            Paypal sandbox gestisce molto male i test, non è detto che in produzione si verifichi lo stesso problema, prova ad usare un account differente di sandbox, dovresti risolvere (poichè il numero ordini viene memorizzato!)
            Saluti

          • Giovanni

            Salve Antonino,
            sì, infatti è così. Anche su consiglio dell’assistenza PayPal avevo già risolto in tal modo. Ogni account PayPal ha un suo proprio conteggio, che non si può più azzerare!
            La cosa importante – e lo dico per i “non udenti” come me…- 😉 è fare tutti i test in sandbox (anche diverse sandbox se con una ci sono problemi come il sù menzionato) ma poi azzerare tutto per l’ultima volta prima di passare alle credenziali API di PayPal definitive, dell’ambiente “live”.
            In tal modo non ci dovrebbero essere più problemi.
            L’ottimo servizio di assistenza PayPal mi ha detto anche che il conteggio delle fatturazioni di PayPal si azzera con l’anno nuovo, presumo quindi che non ci siano particolari problemi a riazzerare Magento a capodanno, tra lenticchie e cotechino, a meno che non si voglia assolutamente tenere traccia di TUTTO su Magento, ovviamente! Ma non so se questa sia una buona idea, meglio tenere traccia di TUTTI i movimenti in altro modo, magari più affidabile…

            Ho una cosa da chiederti però, avendo utilizzato quelle ultime 3 stringhe da totale ignorante di SQL, cosa ho fatto al database? Ho compromesso qualcosa? Ho indebolito la sicurezza di qualcosa? Insomma, cosa ho da temere? Ho solo resettato un contatore oppure ho assegnato caratteristiche diverse alle table del DB? L’assistenza PayPal non si è sbilanciata ma mi diceva che sarebbe meglio non fare queste cose…anche se poi mi è parso di capire che il “workaround” non dovrebbe dare problemi più di tanto, tu che mi puoi dire? Per il momento grazie mille!

          • Antonino Bonumore

            Non credo che riscontrerai problemi una volta abbandonato il sandbox la numerazione si riazzera, l’importante è che il tuo magento segua la giusta progressione prima di uscire dalla sandbox. Dopo che hai verificato questo aspetto non ci sono problemi. I tecnici di paypal sanno per esperienza che gli combinerai un casino e quindi ti suggeriscono di non toccare nulla a livello di db (ed è giusta quest’ottica), ma se hai fatto i controlli necessari non ci saranno problemi, un in bocca al lupo con il tuo e-commerce!

  • http://www.emergento.com Antonino Bonumore

    Salve Giovanni, prova a settare questo parametro all’inizio della query SET foreign_key_checks = 0; alla fine invece SET foreign_key_checks = 1;

  • tonino

    ciao io ho un problema invece di invio mail per ordini effettuati e per registrazione utente….

  • Roby

    per cortesia qualcuno mi sa dire come posso eliminare solo le fatture dal database? oppure modificare i numeri delle fatture già generate. io ho 3 fatture da modificare ovvero dovrei scalare tutti i loro numeri di uno. ne database non trovo la tabella che registra i numeri delle fatture qualcuno mi potrebbe dire come posso fare? grazie un saluto a tutti

  • Roby

    ps: eliminare solo le fatture da magento 1.9