Come automatizzare le regole del carrello in Magento – GuestPost

automatizzare regole carrello magento

Ultimamente mi è stato chiesto numerose volte come automatizzare l’importazione delle regole per creare promozioni in Magento.

Richiesta strana a cui non avevo mai lavorato. Come ovvio, la prima cosa che ho fatto è stata cercare qualche riferimento su google, un punto di partenza. Niente, documentazione misera.

In prima istanza mi sono fatto spiegare quali tipi di promozioni voleva inserire il cliente,  step fondamentale per capire quali regole usare:

  • regole di prezzo del carrello
  • regole di prezzo del catalogo.

regole prezzo Magento

Nel mio caso il cliente aveva la necessità di creare sconti quantità. Era quindi evidente che la strada migliore era creare una serie di regole del carrello.

Parlo di una serie di regole perché, molto spesso, non si ha una sola scontistica all’aumtenare di una soglia di quantità; molto spesso gli sconti aumentano all’aumentare di scaglioni.

Per esempio:

  • sconto 10% oltre i 100 pz inseriti nel carrello
  • sconto 5% oltre i 200pz inseriti nel carrello
  • sconto 3% oltre i 1000pz inseriti nel carrello.

In casi come questo la prima cosa è capire bene come riprodurre il concetto sul Magento utilizzando gli strumenti del backend.

Appena si è riusciti a riprodurre il concetto ci si sposta sulla tabella per capire come Magento replica le regole che gli abbiamo inserito.

Il mio approccio ai progetti

Ogni problema va scomposto in problemi più piccoli per cercare di semplificare. In questa situazione il problema si poteva scomporre in due macroaree:

  1. come mi sarebbero stati passati i dati da inserire?
  2. come riprodurre le regole su Magento?

Andiamo a vedere entrambi i punti

1. Come mi sarebbero stati passati i dati da inserire?

Per questa prima fase mi sono interfacciato con il responsabile informatico dell’azienda committente che mi ha illustrato, schematicamente, in che modo mi sarebbero stati forniti i record da inserire.

Questo primo step mi ha permesso di capire in che modo le regole si sarebbero legate al codice cliente o al codice prodotto.

2. Come riprodurre le regole su Magento?

Anche questo problema va scomposto in due sottoproblemi:

  1. come vengono riprodotte le regole di magento nel database di magento?
  2. come inserire le regole nel database?

2.1 Come vengono riprodotte le regole di magento nel database di magento?

In prima istanza è necessario capire quali tabelle entrano in gioco.

Ho individuato la tabella:

salesrule

La tabella ha diversi campi. Due sono quelli che creano problemi perché richiedono dati serializzati:

conditions_serialized
actions_serialized

Nel primo campo vengono descritte le condizioni, nel secondo le azioni.

2.2 Come inserire le regole nel database?

In primo tentativo, più banale, è stato l’inserimento tramite

insert

Anche facendo un inserimento tramite phpmyadmin mi sono subito reso conto che era una soluzione che non poteva funzionare. Fondamentalmente perché la serializzazione di dati è sempre un po’ complessa e non credo sia la strada giusta.

A questo punto ho provato la seconda strada, di cui però manca una vera e propria documentazione su Google. C’è qualche esempio, ma veramente poco materiale.

Il committente mi aveva avvisato che gli scaglioni, su ogni prodotto, potevano essere diversi. Mi è stato subito chiaro che non bisogna creare un’unica regola di prezzo per ogni prodotto ma n regole per ogni prodotto.

In altre parole, avrei dovuto creare uno script che da una parte leggeva riga per riga le condizioni dal database sorgente e dall’altro importasse su Magento le stesse regole.

regole prezzo automatizzazione magento

I campi da compilare sono tanti e quindi bisogna cercare di individuare i campi indispensabili affinché Magento funzioni correttamente.

Possiamo dire che l’importazione si divide in due parti:

  1. la prima che configura la regola
  2. la successiva che gestisce le condizioni e le regole.

Configurazione della regola di prezzo del carrello

$rule = Mage::getModel('salesrule/rule');
 $customer_groups = array(0, 1, 2, 3,4);
 $rule->setName($sku)
 ->setDescription('')
 ->setFromDate(date('Y-m-d'))
 ->setFromDate('')
 ->setCouponType(1)
 ->setCouponCode(0)

Questa prima parte è uno stralcio dei campi indispensabili. Come si può vedere bisogna inserire informazioni base, tipo il codice articolo (sku), il periodo di validità della promo,ecc…

Condizioni e regole

come automatizzare regole carrello Magento

Questa è la parte complessa. Il problema grosso è che in alcune regole bisogna nidificare ed è piuttosto complesso.

Nel mio caso era: se il codice sku è codice-test e la quantità è 100 allora sconta del 10%

condizione  ->  se il codice sku nel carrello è codice-test e la quantità è 100
azione  ->   sconto è del 10%.

Per riprodurla ho usato una forma di questo tipo:

$conditions = Mage::getModel('salesrule/rule_condition_product')
 ->setType('salesrule/rule_condition_product')
 ->setAttribute('sku')
 ->setOperator('==')
 ->setValue($codice-sku);
  • setType = è il tipo di condizione da verificare. se ad esempio dobbiamo dobbiamo verificare l’esistenza del prodotto nel carrello dovremo usare una stringa di questo tipo:
    “rule_condition_product_found”
  • setAttribute = è il tipo di attributo da verificare
    setOperator = è il classico operatore booleano
  • setValue = è la variabile.

e la relativa azione:

$actions = Mage::getModel('salesrule/rule_condition_product')
 ->setType('salesrule/rule_condition_product')
 ->setAttribute('quote_item_qty')
 ->setOperator('>')
 ->setValue($quantita);

a questo non dobbiamo fare altro che un save, un try e un except (magari con l’esplicitazione degli errori) ed il gioco è fatto.

Concludendo

Personalmente, quando lavoro su progetti di questo tipo, creo anche delle funzione personalizzate che generano i log.

Questo perché quando si lavora a funzioni esterne con Magento è sempre meglio avere un report che ci spieghi se tutto sta procedendo bene. Ancora più interessante è inserire anche una serie di controlli che esplicitino l’errore della procedura creata.

Ti è piaciuto questo articolo? Votalo!

Torna in alto